我正在尝试映射迭代器的项目,一次 N 个。像这样的事情:
let a = vec![1, 2, 3, 4];
let b = a.iter().map2(|i, j| i + j);
b.collect()
然后会产生 b = [3, 7]
有没有简单的方法可以实现这一点?
最佳答案
不符合规定。您需要将其分解为“将 vec 拆分为不相交子集的迭代器”和“对每个子集求和”:
let a = vec![1, 2, 3, 4];
let b = a.chunks(2).map(|chunk| chunk.iter().sum::<i32>());
println!("b = {:?}", b.collect::<Vec<_>>());
请注意,当 a
是通用迭代器时(它依赖于它是一个切片),这不起作用,尽管您可以使用 itertools
使其工作。 crate :
use itertools::Itertools;
let a = vec![1, 2, 3, 4];
let a = a.iter().cloned(); // we can't rely on a being a Vec any more.
let b = (&a.chunks(2)).into_iter()
.map(|chunk| chunk.sum::<i32>())
.collect::<Vec<_>>();
println!("b = {:?}", b);
关于rust - 一次映射一个迭代器 n 个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46902648/