假设我们有一个结构向量:
struct Item {
id: u32,
name: String,
// ...
}
let mut items: Vec<Item> = vec!(
Item { id: 54, name: "Foo".into() },
Item { id: 87, name: "Bar".into() });
创建如下哈希图的最有效方法是什么:
{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();
这当然不是最有效的解决方案,因为它创建了一个元组的临时向量,但正如我所说的,我最关心的是方便和;在这种情况下简洁。那么,还有比这更简单的吗?