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

烈火

有什么办法可以在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]);
}

对于文字,我可以在这里使用答案,该答案本示例中可能会很好地工作,但是我很好奇是否有一种方法可以不使用文字,以防将来出现这种情况。

ArtemGr

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

是的,你可以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预先提供的大小提示来保留一些空间。

在map.rs中查看此方法的源代码

还是用多个条目初始化它?

由于HashMap实现了FromIterator特性,这也是可能当实现collection时FromIterator,可以使用Iterator::collect速记来构造它。考虑以下示例,所有示例均生成相同的地图:

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}.
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有什么办法可以在matplotlib中一次分配多个xlabel?

如何使用Java在Hibernate中一次将数据插入到多个表中

在一条语句中一次将多个条目添加到HashMap

在 Python 中:一次将 QtableWidget 中的所有条目插入到数据库表中

HashMap 将所有条目更改为每个循环的最后一次插入

有什么方法可以使用Java在BMC Remedy中一次创建多个记录?

有没有办法在C#中一次更改多个Dictionary值?

如何一次将多个值插入到postgres表中?

有什么方法可以使用 python 在 Maya 中一次设置多个键和值?

有什么办法可以将下面的嵌套json数据插入到SQL Server中

有什么办法可以将数组元素插入到mysql数据库中

如何在猫鼬中一次将多个文档插入子文档

在mysql中一次将数据插入到两个表

一次将多个(许多)行插入表中

在Cassandra中一次插入多个记录

如何在Rust中一次使用Vec中的多个项目?

使用node.js在sqlite3中一次插入多个相关表

有没有办法可以在 python talib 和 btalib 中一次检索所有指标?

有没有办法在处理过程中一次检测多个键输入?

是否可以在silverstripe 3.3中一次性添加多个DataObject?

有没有一种方法可以在Qt中一次设置多个图标(即小部件中的所有图标)的图标大小?

libgdx中一次有多个粒子效果

在 Rails 中一次从多个表中获取记录?

在Python中一次更改列表中的多个项目

有什么办法可以使提示变量在此循环内仅执行一次?

Django:一次将多个条目保存在数据库中

从多个线程中一次变异/读取一个HashMap,但一次只能一个线程

有什么办法可以将多个API结果汇总到Django Rest Framework中的单个API中?

有什么办法可以通过Java哈希图中的键获取特定条目(已插入多个值)?