我似乎找不到从 HashSet
中弹出(随机)值的方法.受其他代码示例的启发,我写了以下内容:
my_set.iter().next().map(|i| my_set.take(i).unwrap())
即获取集合值的迭代器,从中获取第一个值(引用),然后运行 my_set.take()
使用先前获得的引用,获取值本身(而不是引用)并将其从集合中删除。由于以下原因无法编译:
error[E0500]: closure requires unique access to `my_set` but it is already borrowed
|
32 | my_set.iter().next().map(|i| my_set.take(i).unwrap())
| ------ --- ^^^ ------ second borrow occurs due to use of `my_set` in closure
| | | |
| | | closure construction occurs here
| | first borrow later used by call
| borrow occurs here
我已经尝试了很多很多变种,但它们都失败了,因为不可变的借用然后被借用为可变的(错误 502)。任何人都可以推荐一种重写上述内容的方法吗?
最佳答案
如果您可以克隆删除的项目,您可以执行以下操作:
let elem = set.iter().next().unwrap().clone();
set.remove(&elem);
Playground或者防止集合为空:
if let Some(elem) = set.iter().next().cloned() {
set.remove(&elem);
}
Playground
关于rust - "Popping"来自 HashSet 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68825244/