迭代它时删除一个元素

时间:2017-09-04 08:56:00

标签: rust

有没有办法在迭代时删除元素?这是一个代码示例:

for particle in &mut particles {

    let mut delete = false;
    // Do stuff...

    if delete {
        // Remove element from particles vector <-- THIS
    }

}

我认为这种(脏)设计无法实现。什么是常见的(优雅?)模式去除向量中的一些元素,假设我需要迭代才能知道我需要删除哪个元素?如果重复,请随意关闭。

1 个答案:

答案 0 :(得分:6)

您可能想要使用Vec::retain()。它允许您决定是否保留每个元素。所以在你的情况下看起来像这样:

particles.retain(|particle| {
    let delete = {
        // Do stuff ...
    };
    !delete
})

您必须从闭包中返回bool。如果您返回true,则不会删除该元素;如果您返回false,则会将其删除。

如果你需要以某种方式将一个元素与向量中的所有其他元素进行比较,那么retain()就不够了。在这种情况下,您可以找到一个很棒的答案here