我有一个向量v
我想迭代,同时对每个元素执行一个函数
map()
)filter()
- 但我不想再次调用该函数,因为它修改了元素的状态)< / LI>
v
的新元素:这是真的棘手,因为我希望迭代继续迭代这些新添加的元素在同一个循环中再次,产生可以附加的新元素等等 - 可能永远不会结束。这是一个非常简单的例子:
fn main() {
let mut v = vec![1,2,3];
let mut i = 0;
while i < v.len() {
println!("{}", v[i]);
// 1. modify element
v[i] += 1;
// look at result
match v[i] % 3 {
// 2a. remove element
0 => {
// no i increment since next element now has same index
v.remove(i);
},
// 2b. append element
1 => {
let temp = v[i];
v.push(temp+1);
i += 1;
},
// 2c. do nothing
_ => i += 1,
}
}
println!("{:?}", v);
}
而不是手动使用while
我喜欢以某种方式使用迭代器。 filter_mut()
已经完成了1,2a。 (和2c。)但2b。我不知道如何处理。
由于附加可能是递归的,只是持有一个新附加元素的队列是不够的,至少需要一个这样的队列或类似的循环 - 但这也不是真的&#34;很好&#34 ;
有一些类似的问题,但似乎并没有完全涵盖我想做的事情。