gpt4 book ai didi

rust - 从引用修改 hashmap 到值的最佳方法

转载 作者:行者123 更新时间:2023-11-29 08:07:46 28 4
gpt4 key购买 nike

use std::collections::{HashMap, HashSet};
use std::hash::{Hash};

fn test(data: &mut HashMap<String, HashSet<String>>) {
match data.get("foo") {
None => return,
Some(xs) => {
let xs: Vec<String> = xs.iter().map(|x| x.to_owned()).collect();
// How to drop `data` here so that I can borrow `data`.
for x in xs {
// Mutable borrow occurs, because previous `data` is still in scope.
data.remove(&x);
}
}
}
}

上面的代码不起作用,因为我再次可变借用了data,而之前的借用仍在范围内。但是,我找不到一个简单的方法来解除之前借用的绑定(bind)。

另外,有没有更好的方法来复制 xs 以便我可以在迭代时修改 hashmap。

最佳答案

您非常接近解决方案。一旦你有了一个独立的向量,你就可以借用 map 将它移出范围:

use std::collections::{HashMap, HashSet};

fn test(data: &mut HashMap<String, HashSet<String>>) {
let xs: Vec<String> = match data.get("foo") {
None => return,
Some(xs) => {
xs.iter().map(|x| x.to_owned()).collect()
}
};
for x in xs {
data.remove(&x);
}

}

Playground

关于rust - 从引用修改 hashmap 到值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44120261/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com