在Python中,将逗号显示为以逗号分隔的列表非常容易:
>>> iterable = ["a", "b", "c"]
>>> ", ".join(iterable)
'a, b, c'
Run Code Online (Sandbox Code Playgroud)
是否有一种接近这种简洁的Java方式?(注意最后没有",".)
考虑以下代码:
enum size = 16;
double[size] arr1 = [...];
double[size] arr2 = [...];
process = (double x) { return (x + 1); };
arr2[] = map!(process)(arr1[]); // here
Run Code Online (Sandbox Code Playgroud)
我无法将结果转换map回我的普通数组.问题不仅适用于map,而且要take,repeat并从所有这些精细的工具std.algorithm,并std.range在该范围内操作.
在这个任务上,我明白了Error: cannot implicitly convert expression (map(arr1[])) of type Result to double[].如何在不使用的情况下评估范围到数组
uint i = 0;
foreach (x; map!(process)(arr1[])) {
arr2[i] = x;
i++;
}
Run Code Online (Sandbox Code Playgroud)
?
另外,有人可以解释,为什么我必须调用map!(process)(arr1[])而不是map!(process)(arr1)静态数组?静态数组不应该与动态的迭代方法兼容,或者我没有得到什么?
此外,似乎简单的枚举语法foreach (index, item; sequence)不适用于范围 - …
我目前正在学习STL,我对find和const迭代器有一些不确定性.假设我有一个find函数:
some_stl_container::const_iterator found = myContainer.find(value);
Run Code Online (Sandbox Code Playgroud)
在那之后,我应该检查我得到的found另一个const_iterator,或者只是对一个迭代器进行检查是有效的.基本上这样做会有任何区别:
if(found!=myContainer.cend())
Run Code Online (Sandbox Code Playgroud)
还有这个:
if(found!=myContainer.end())
Run Code Online (Sandbox Code Playgroud)
第一个看起来更准确(至少对我而言),但第二个应该也能正常工作,对吗?
我是Rust的新手,我正在努力学习迭代器.我正在研究的具体问题是产生三角形数字的迭代器(三角形数字为1,3,6,10,15,其中1 = 1,3 = 1 + 2,6 = 1 + 2 + 3等).我有这个创建的基础知识,如下所示:
pub struct Triangle {
cur: u32,
n: u32,
m: u32,
}
impl Iterator for Triangle {
type Item = u32;
fn next(&mut self) -> Option<u32> {
if self.n == self.m {
return None;
}
self.n = self.n + 1;
self.cur = self.cur + self.n;
Some(self.cur)
}
}
Run Code Online (Sandbox Code Playgroud)
一个快速可运行的例子是
let t = Triangle { cur: 0, n: 0, m: 10 };
let s: u32 = t.sum();
println!("{}", s); …Run Code Online (Sandbox Code Playgroud) 我最初尝试generator在编写用于训练Keras模型的自定义生成器时使用语法.所以我yield编辑__next__.但是,当我尝试训练我的模式时,model.fit_generator我会得到一个错误,我的生成器不是迭代器.的修复是改变yield到return其中还必要rejiggering的逻辑__next__以跟踪状态.与让yield我为我工作相比,这相当麻烦.
有没有办法可以让这个工作yield?如果我必须使用return语句,我将需要编写几个迭代器,这些迭代器必须具有非常笨重的逻辑.
在试图解决一个问题,我开始思考这个-给予user-defined class和2 comparators吧,让我们说我们有2套std::set<user_class,comparator_inc>,并std::set<user_class,comparator_dec>在comparators排序上的一个值增减值user_class(一个简单的int也许).这是我的代码:
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::set;
struct A
{
int val;
};
struct c_inc
{
bool operator()(const A& first,const A& second) const
{
return first.val > second.val;
}
};
struct c_dec
{
bool operator()(const A& first,const A& second) const
{
return first.val < second.val;
}
};
int main()
{
set<A,c_inc> s1;
set<A,c_dec> s2;
auto x = s1.insert({1});
cout << x.first->val …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在二进制堆(最大或最小)上实现迭代器的方法。
也就是说,通过第i次使用其nextNode()函数,可以获得堆中第i个(更大或更小的)元素。
请注意,此操作是在没有实际提取堆根的情况下发生的!
我最初的想法是:
我了解这些方法消除了使用堆的好处,因此我正在寻找一种更好的方法。
我目前正在使用一种不太像scala的方法来解析大型Unix邮箱文件。我仍在学习该语言,并想挑战自己以寻求更好的方法,但是,我不相信我对使用an可以做什么Iterator以及如何有效使用它有扎实的了解。
我目前正在使用 org.apache.james.mime4j,并且使用org.apache.james.mime4j.mboxiterator.MboxIterator来java.util.Iterator从文件中获取,因此:
// registers an implementation of a ContentHandler that
// allows me to construct an object representing an email
// using callbacks
val handler: ContentHandler = new MyHandler();
// creates a parser that parses a SINGLE email from a given InputStream
val parser: MimeStreamParser = new MimeStreamParser(configBuilder.build());
// register my handler
parser.setContentHandler(handler);
// Get a java.util.Iterator
val iterator = MboxIterator.fromFile(fileName).build();
// For each email, process it using above Handler
iterator.forEach(p => …Run Code Online (Sandbox Code Playgroud) 从C ++ 11开始,要将某些向量追加y到另一个向量x,可以执行以下操作:
x.insert(x.end(), std::make_move_iterator(y.begin()), std::make_move_iterator(y.end()));
Run Code Online (Sandbox Code Playgroud)
使用C ++ 17类模板参数推论,可以更简洁地编写此代码:
x.insert(x.end(), std::move_iterator(y.begin()), std::move_iterator(y.end()));
Run Code Online (Sandbox Code Playgroud)
从C ++ 17开始,这不会变得std::make_move_iterator多余吗?拥有一些有价值的东西std::make_move_iterator()吗?
出于好奇,对 的std::advance()距离类型使用模板参数的基本原理是什么,但difference_type对距离 instd::next()和使用迭代器的基本原理是什么std::prev()?
为什么不使用相同的方法(任一方法)?
跟进:
默认的存在n = 1似乎并没有阻止next被模板化,Distance正如下面的答案中所建议的那样。这编译:
#include <iterator>
#include <set>
template<typename InputIt,
typename Distance = typename std::iterator_traits<InputIt>::difference_type>
InputIt my_next(InputIt it, Distance n = 1)
{
std::advance(it, n);
return it;
}
int main()
{
std::set<int> s;
my_next(s.begin());
my_next(s.begin(), 10ul);
return 0;
}
Run Code Online (Sandbox Code Playgroud)