一次映射一个迭代器n项

时间:2017-10-24 05:10:33

标签: rust

我试图一次映射一个迭代器的项目。像这样:

let a = vec![1, 2, 3, 4];
let b = a.iter().map2(|i, j| i + j);
然后

b.collect()会产生b = [3, 7]

有没有一种简单的方法可以达到这个目的?

1 个答案:

答案 0 :(得分:3)

没有说明。你需要把它分解为“拆分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包来使其工作:

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);