是否有零开销消耗迭代器?
Is there a zero-overhead consuming iterator?
我经常发现自己编写如下代码:
myvec.iter().map(|x| some_operation(x)).count()
count
的调用触发了迭代器链的消耗,但也产生了不希望的非单位结果。
我正在寻找类似
的内容
myvec.iter().map(|x| some_operation(x)).consume()
应该等同于
for _ in myvec.iter().map(|x| some_operation(x)) {}
不,Rust 没有这个。
were several discussions and even an RFC 关于对迭代器进行 for_each()
操作,它将为迭代器的每个元素执行一个闭包,消耗它,但目前还没有。
考虑改用 for
循环:
for x in myvec.iter() {
some_operation(x);
}
在这种特殊情况下,它看起来确实比迭代器操作更好。
Iterator::for_each
为所欲为:
struct Int(i32);
impl Int {
fn print(&self) {
println!("{}", self.0)
}
}
fn main() {
[Int(1), Int(2), Int(3)].into_iter().for_each(Int::print);
}
我经常发现自己编写如下代码:
myvec.iter().map(|x| some_operation(x)).count()
count
的调用触发了迭代器链的消耗,但也产生了不希望的非单位结果。
我正在寻找类似
的内容myvec.iter().map(|x| some_operation(x)).consume()
应该等同于
for _ in myvec.iter().map(|x| some_operation(x)) {}
不,Rust 没有这个。
were several discussions and even an RFC 关于对迭代器进行 for_each()
操作,它将为迭代器的每个元素执行一个闭包,消耗它,但目前还没有。
考虑改用 for
循环:
for x in myvec.iter() {
some_operation(x);
}
在这种特殊情况下,它看起来确实比迭代器操作更好。
Iterator::for_each
为所欲为:
struct Int(i32);
impl Int {
fn print(&self) {
println!("{}", self.0)
}
}
fn main() {
[Int(1), Int(2), Int(3)].into_iter().for_each(Int::print);
}