从向量中反复弹出()项的简单方法是什么?

时间:2016-08-12 06:51:42

标签: stack rust

将矢量用作堆栈(存储被推送和弹出的状态)

while stack.len() != 0 {
    let state = stack.pop().unwrap();
    // ... optionally push other states onto the stack.
}

在Rust中有一种不那么冗长的方法吗?

2 个答案:

答案 0 :(得分:6)

您可以使用pop()返回Option<T>并使用while let循环匹配的事实:

while let Some(state) = stack.pop() {
    // ... fine to call stack.push() here
}

while let贬低了以下内容:

loop {
    match stack.pop() {
        Some(state) => {
            // ... fine to call stack.push() here
        }
        _ => break
    }
}

答案 1 :(得分:2)

只是提供替代方法,您还可以使用drain method删除元素,并在Iterator中将它们提供给您。

stack.drain(..).map(|element| ...and so on

for element in stack.drain(..) {
    //do stuff
}

如果您只想删除特定范围的元素,也可以提供RangeArgument。这可以<start-inclusive>..<end-exclusive>的形式提供。范围参数的开始和结束都是可选的,并且默认为向量的结尾,因此调用drain(..)只会消耗整个向量,而drain(2..)将保留前2个元素然后把剩下的都耗尽。