gpt4 book ai didi

rust - 从 Vector 字段创建 HashMap 的最有效方法

转载 作者:行者123 更新时间:2023-12-05 09:32:12 25 4
gpt4 key购买 nike

假设我们有一个结构向量:

struct Item {
id: u32,
name: String,
// ...
}

let mut items: Vec<Item> = vec!(
Item { id: 54, name: "Foo".into() },
Item { id: 87, name: "Bar".into() });

创建如下所示的 HashMap 的最有效方法是什么:

{87: "Bar", 54: "Foo"}

?

在这种情况下,我所说的“高效”主要是指“不那么冗长”。为什么?因为我觉得在大多数现实世界的情况下,轻微的性能损失并不重要。但是当它确实重要时,总是可以求助于 HashMap::with_capacity() 和一个简单的循环,例如。尽管如此,在其他条件相同的情况下,我当然更喜欢更快且使用更少内存的解决方案。

我能想到的最简单的事情是:

let temp_tuples = items.iter().map(|x| (x.id, x.name.clone())).collect::<Vec<_>>();
let map_names_by_id: HashMap<_, _> = temp_tuples.into_iter().collect();

这肯定不是最高效的解决方案,因为它创建了一个临时的元组向量,但正如我所说,在这种情况下,我主要关心的是方便性和简洁性。那么,还有比这更简单的方法吗?

最佳答案

中间不需要收集到Vec:

let map_names_by_id: HashMap<_, _> =
items.iter().map(|x| (x.id, x.name.clone())).collect();

关于rust - 从 Vector 字段创建 HashMap 的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68342812/

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