我想对迭代器应用简化,但我不需要最终值,中间结果也很重要。
举个例子,让我们将距离向量转换为位置向量:
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);