在Rust中有没有办法一次插入多个条目到一个HashMap中?或者用多个条目初始化它?除了在你插入的每个元素上手动调用insert
之外,还有什么办法吗?
编辑使用英语字母频率的示例:
我基本上想要:
let frequencies = {
'a': 0.08167,
'b': 0.01492,
...
'z': 0.00074
}
我知道我 * 可以 * 通过执行如下的for循环来实现相同的结果,但我想知道是否有一种方法可以做到这一点,而无需创建额外的数组,然后在它们上循环,或者总体上有一种更优雅的解决方案。
let mut frequencies = HashMap::new();
let letters = ['a','b','c', ...... 'z'];
let freqs = [0.08167, 0.01492, 0.02782, ......., 0.00074];
for i in 0..26 {
frequencies.insert(letters[i], freqs[i]);
}
对于字面量,我可以使用here,这在本例中可能会很好,但我很好奇是否有一种方法可以在不使用字面量的情况下做到这一点,以防将来出现这种情况。
2条答案
按热度按时间hk8txs481#
在Rust中有没有办法一次将多个条目插入到一个HashMap中?
是的,您可以使用
Iterator
中的值对HashMap
执行extend
操作,如下所示:它甚至比手动调用
insert
还要快一些,因为extend
使用Iterator
提供的大小提示来预先保留一些空间。在map.rs中查看该方法的源代码。
还是用多个条目初始化它?
由于
HashMap
实现了FromIterator
trait,这也是可能的。当集合实现FromIterator
时,您可以使用Iterator::collect
简写来构造它。考虑以下示例,所有这些示例都生成相同的Map:x一个一个一个一个x一个一个二个一个x一个一个三个一个
kpbwa7wx2#
请参见Rust Playground。