在遍历所述向量的同时附加/移除向量中的元素

时间:2017-09-20 12:14:57

标签: vector filter iterator rust move-semantics

我有一个向量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 ;

有一些类似的问题,但似乎并没有完全涵盖我想做的事情。

0 个答案:

没有答案