gpt4 book ai didi

hashmap - 有什么方法可以在 Rust 中一次将多个条目插入到 HashMap 中?

转载 作者:行者123 更新时间:2023-11-29 07:52:06 25 4
gpt4 key购买 nike

有什么方法可以在 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 ,这对于这个示例可能会很好地工作,但我很好奇是否有一种方法可以在不使用文字的情况下执行此操作,以防将来出现这种情况。

最佳答案

Is there any way to insert multiple entries into a HashMap at once in Rust?

是的,你可以extend一个 HashMap,其值来自 Iterator,如下所示:

use std::collections::HashMap;

fn main() {
let mut map = HashMap::new();
map.extend((1..3).map(|n| (format!("{}*2=", n), n * 2)));
map.extend((7..9).map(|n| (format!("{}*2=", n), n * 2)));
println!("{:?}", map); // Prints {"1*2=": 2, "8*2=": 16, "7*2=": 14, "2*2=": 4}.
}

它甚至比手动调用 insert 快一点,因为 extend 使用 Iterator 提供的大小提示来保留预先留出一些空间。

查看方法源码here, in map.rs .

Or to initialize it with multiple entries?

这也是可能的,这要归功于 HashMap 实现了 FromIterator 特性。当集合实现 FromIterator 时,您可以使用 Iterator::collect构造它的简写。考虑以下示例,它们都生成相同的 map :

use std::collections::HashMap;

fn main() {
let mut map: HashMap<_, _> = (1..3).map(|n| (format!("{}*2=", n), n * 2)).collect();
map.extend((7..9).map(|n| (format!("{}*2=", n), n * 2)));
println!("{:?}", map); // Prints {"1*2=": 2, "8*2=": 16, "7*2=": 14, "2*2=": 4}.
}

use std::collections::HashMap;

fn main() {
let map: HashMap<_, _> = (1..3)
.chain(7..9)
.map(|n| (format!("{}*2=", n), n * 2))
.collect();
println!("{:?}", map); // Prints {"1*2=": 2, "8*2=": 16, "7*2=": 14, "2*2=": 4}.
}

use std::collections::HashMap;
use std::iter::FromIterator;

fn main() {
let iter = (1..3).chain(7..9).map(|n| (format!("{}*2=", n), n * 2));
let map = HashMap::<String, u32>::from_iter(iter);
println!("{:?}", map); // Prints {"1*2=": 2, "8*2=": 16, "7*2=": 14, "2*2=": 4}.
}

关于hashmap - 有什么方法可以在 Rust 中一次将多个条目插入到 HashMap 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575380/

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