Rust 是否存在消耗零开销的迭代器?
我经常发现自己编写的代码如下:Rust 是否存在消耗零开销的迭代器?,rust,Rust,我经常发现自己编写的代码如下: 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没有这个 在迭代器上有一个for_each()操
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没有这个 在迭代器上有一个
for_each()
操作,该操作将为迭代器的每个元素执行闭包,并使用它,但还没有任何内容
考虑将改为循环:
for x in myvec.iter() {
some_operation(x);
}
在这种特殊情况下,它看起来确实比迭代器操作更好。实现了您想要的:
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);
}
我同意,它看起来确实更好,也许这就是为什么现在还没有消费迭代器的原因。这可能会让那些被迭代器蒙蔽的人重新思考他们的特定用例。您的两个示例都使用了映射
,该映射旨在转换项目。扔掉这个结果意味着整个迭代器都没用了。出于某种原因,我不想再使用For循环了。别问我为什么,也许这个问题相对没用。