【发布时间】:2019-10-01 07:40:04
【问题描述】:
我想遍历结构中的集合类型并删除一些值,但 Rust 阻止我销毁集合:
fn some_method(&mut self) {
self.collection = self
.collection
.into_iter()
.filter(/* ... */
.collect();
}
我可以克隆所有值来构建另一个集合,但这并不高效。在 Rust 中从集合中删除值的惯用方式是什么?
【问题讨论】:
-
如果
filter回调在中途发生恐慌,那么self.collection应该是什么?请提供一个更完整的示例 sn-p,例如,collection是Vec?如果是,那么.drain(..)而不是into_iter()将在这里工作,因为它不具有所有权。还有.retain(...)。 -
@loganfsmyth 在我的例子中,集合是
BTreeMap,它没有drain方法。我真的需要关心恐慌吗?在 rust 中,恐慌是真正的恐慌,而不是应该正确处理的控制流? -
@loganfsmyth 而我想要的是“在迭代时删除”,类似于 Java 中的
iterator.remove()。 -
@JiamingLu Rust 的迭代器可以迭代不可变的东西。 Java 的迭代器可以做到这一点,如果可以,
remove会做什么?
标签: rust