gpt4 book ai didi

rust - Rust-创建 HashMap ,该 HashMap 使用从迭代器存储的部分数据

转载 作者:行者123 更新时间:2023-12-03 11:28:19 24 4
gpt4 key购买 nike

我不熟悉 rust ,正在尝试找出如何从数据的HashMap创建借入值的Vec的方法,但是当我尝试这样做时,我将Vec转换为HashMap的所有权模型与我抗衡。我不知道该怎么做,也许我只是在尝试一些违背Rust思想的方法。

例如:

struct Data{
id: String,
other_value: String,
}

//inside a method somewhere
let data_array = load_data(); // returns a Vec<Data>
let mut hash = HashMap::new(); // HashMap<&String, &Data>

for item in data_array {
hash.insert(&item.id, &item);
}

据我所知,应该有一种以这种方式填充此数据的方法,因为 HashMap将存储对原始数据的引用。或者也许我只是误解了文档... _(ツ)_/¯

最佳答案

这里的关键问题是您正在使用Vec。 Rust中的for循环负责实现IntoIter的事情。 IntoIter将Vec移到迭代器中-完成此操作后,Vec本身将不存在。

因此,您循环的项目在每次迭代结束时都会消失,因此那些引用最终将引用不存在的数据(悬挂的引用)。如果您尝试使用它们,则会发生“坏事”。 Rust会阻止您用这种方式射击自己的脚,因此您会收到一条错误消息,告诉您引用生命周期不足。使代码编译的解决方案非常简单。只需在循环末尾添加.iter()即可,它会遍历引用而不是使用Vec

for item in data_array.iter() {
hash.insert(&item.id, item); //Note we don't need an `&` in front of item
}

关于rust - Rust-创建 HashMap ,该 HashMap 使用从迭代器存储的部分数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61001744/

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