我想对迭代器进行归约,但是我不需要最终值,中间结果也很重要。
作为一个例子,让我们将距离向量转换为位置向量:
let distances = vec![3, 2, 1, 4];
// create positions vector [3, 5, 6, 10]
我尝试的解决方案使用map
和闭包:
let mut acc = 0;
let positions: Vec<i32> = distances
.iter()
.map(|x| {
acc = acc + x;
acc
})
.collect();
@starblue的好评:要进行累加,fold
是最好的选择。它应用减少量并返回最后一个值。它不会返回中间解决方案:
// basically exact code from fold example in the docs
let last_position = distances.iter().fold(0, |acc, x| acc + x);