【发布时间】:2017-11-18 09:54:06
【问题描述】:
有没有办法在 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,这可能适用于本示例,但我很好奇是否有办法做到这一点而不是文字,以防万一出现在未来。
【问题讨论】:
-
你能解释一下你为什么想要这个吗?您是否试图避免多次输入“插入”? (如果是这样,则有一个 Hashmap 文字宏箱。)您是否试图避免调整 Hashmap 的大小? (如果是这样,那么您可以使用 'with_capacity' 对其进行初始化)您是否试图避免通过运行时来回往返? (如果是这样,我会告诉你不要担心,这并不像在 Python 或 JavaScript 中那样真正存在。)你是否试图缩短合并两个 Hashmap 所需的代码,因为你在很多地方都这样做?
-
除了在每个元素上手动调用 insert — 是的,您可以使用循环,然后“手动”只调用一次
insert。 -
目的是用一些值来初始化HashMap。例如,英文字母频率。我基本上想要{'a':0.08167,'b':0.01492,...,'z':0.00074}。我想我可以创建一个键数组、一个值数组,然后遍历索引以插入像
map.insert(letter[i], freq[i])这样的元素。我只是想知道是否有办法一次完成这一切。我将编辑我的问题以反映这一点。 -
循环解决方案不好并没有真正的原因。我一直在以 Python 的方式考虑它,试图避免运行时问题,但这并不是什么大问题。我想它只是感觉不那么优雅。但是,唉。