当前位置:首页 > 科技  > 软件

Rust Map指南:深入理解、轻松应用

来源: 责编: 时间:2024-01-15 09:21:52 125观看
导读大家好,我是渔夫。今天我们来聊聊 Rust 中的map知识,在其他语言一样,Map 通常指的是一种数据结构和一系列操作,用于将一组值映射到另一组值或执行某些操作,也就是我们常说的键值对。接下来一起探讨 Rust 中map 的基本用法,

大家好,我是渔夫。mSN28资讯网——每日最新资讯28at.com

今天我们来聊聊 Rust 中的map知识,在其他语言一样,Map 通常指的是一种数据结构和一系列操作,用于将一组值映射到另一组值或执行某些操作,也就是我们常说的键值对。接下来一起探讨 Rust 中map 的基本用法,和常见操作以及一些有用的技巧。mSN28资讯网——每日最新资讯28at.com

mSN28资讯网——每日最新资讯28at.com

什么是map?

在 Rust 中map是一种非常重要数据结构,和其他语言类似,也是一种键-值存储的集合。它能够允许你将一个键与一个值相关联,然后就方便通过键来检索值。下面是简单例子,在 Rust中,map通常通过std::collections::HashMap来实现。mSN28资讯网——每日最新资讯28at.com

use std::collections::HashMap;fn main() {    let mut scores = HashMap::new();    scores.insert("Alice", 100);    scores.insert("Bob", 90);    scores.insert("Charlie", 95);    let alice_score = scores.get("Alice");    match alice_score {        Some(score) => println!("Alice's score is: {}", score),        None => println!("Alice's score is not available."),    }}

运行结果:mSN28资讯网——每日最新资讯28at.com

Alice's score is: 100[Done] exited with code=0 in 0.689 seconds

在上面的示例中,创建了一个名为scores的HashMap,并且将三个键值对插入其中。使用get方法来检索 "Alice" 的分数。mSN28资讯网——每日最新资讯28at.com

  • 其中 match alice_score { ... } ,作用是它用于匹配alice_score的值,并根据匹配结果执行不同的代码块。
  • Some(score) => println!("Alice's score is: {}", score):这是一个匹配分支。它检查alice_score是否包含Some值。
  • None => println!("Alice's score is not available."):这是另一个匹配分支,用于处理alice_score为None的情况。

在 Rust 语言还是挺好用的这些匹配规则。mSN28资讯网——每日最新资讯28at.com

基本操作

1.插入和更新值

如果你要向HashMap中插入新的键值对,可以使用insert方法。如果键已经存在,它将把值覆盖掉。mSN28资讯网——每日最新资讯28at.com

scores.insert("Alice", 105);  // 更新Alice的分数scores.insert("Eve", 80);      // 插入新的键值对

2.获取值

要获取HashMap中的值,可以使用get方法,和 Java 是不是很类似。如果键不存在,它会返回一个Option。mSN28资讯网——每日最新资讯28at.com

// let alice_score = scores.get("test"); // 键不存在,将会打印出 Nonelet alice_score = scores.get("Alice");match alice_score {    Some(score) => println!("Alice's score is: {}", score),    None => println!("Alice's score is not available."),}

3.删除值

还可以对HashMap中的键值对进行删除操作,可以使用remove方法。mSN28资讯网——每日最新资讯28at.com

scores.remove("Bob");

4.遍历

除上面增删改操作,还有一个重要的,如果遍历HashMap中的所有键值,这里使用迭代器。mSN28资讯网——每日最新资讯28at.com

use std::collections::HashMap;fn main() {    let mut scores = HashMap::new();    scores.insert("Alice", 100);    scores.insert("Bob", 90);    scores.insert("Charlie", 95);    scores.insert("Alice", 105);    // 遍历    for (key, value) in &scores {        println!("{}: {}", key, value);    }}

遍历结果:mSN28资讯网——每日最新资讯28at.com

Charlie: 95Alice: 105Bob: 90[Done] exited with code=0 in 0.521 seconds

除了上面介绍的常见操作以外,其实HashMap还提供了许多有用的方法,比如查找键是否存在、获取键的集合、获取值的集合等等。这些方法在实际开发中,可以根据需要灵活使用,非常方便。mSN28资讯网——每日最新资讯28at.com

5.默认值

首先,来看第一个,默认值,这个作用是如果键不存在,你可以使用entry方法来设置默认值。mSN28资讯网——每日最新资讯28at.com

let charlie_score = scores.entry("Charlie").or_insert(0);

6.更新值

另外还可以使用entry方法来更新值,这就更加有意思了,可以让你在在原有值的基础上执行操作,用起来也是挺爽是不是。mSN28资讯网——每日最新资讯28at.com

let bob_score = scores.entry("Bob").or_insert(0);*bob_score += 5;

7.排序

最后一个,如果需要按键或值对HashMap进行排序,你可以将它们提取到Vec中,然后使用sort方法来排序。mSN28资讯网——每日最新资讯28at.com

let mut score_vec: Vec<(&str, &i32)> = scores.iter().collect();score_vec.sort_by(|a, b| b.1.cmp(a.1));  // 按值降序排序
  • scores.iter() 是使用HashMap的iter方法,返回一个迭代器,该迭代器可以用于遍历HashMap中的键值对。
  • collect方法,作用是将迭代器中的元素收集到一个容器中,这里是将键值对收集到了score_vec向量中。

然后现在score_vec向量包含了HashMap中的键值对,然后使用sort_by方法来排序向量中的元素。其实就是通过一个闭包完成的,该闭包接受两个参数a和b,它们分别代表向量中的两个元素,每个元素都是一个包含键和值的元组。mSN28资讯网——每日最新资讯28at.com

元素比较使用cmp方法,它返回一个排序顺序,对于整数的话,它可以是Ordering::Less、Ordering::Equal或Ordering::Greater,分别表示“小于”、“等于”或“大于”这样比较。mSN28资讯网——每日最新资讯28at.com

最后

总结, Rust 中的HashMap是一个强大的数据结构,用于存储和操作键值对。今天主要介绍常规用法、常见操作和一些技巧,希望对你有所帮助。mSN28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-60985-0.htmlRust Map指南:深入理解、轻松应用

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用Python、OpenCV和Pyzbar实时摄像头识别二维码!

下一篇: 图片识别无须借助外包API,使用这两个强大的Python库也能实现

标签:
  • 热门焦点
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • JavaScript学习 -AES加密算法

    JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 使用LLM插件从命令行访问Llama 2

    使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • .NET 程序的 GDI 句柄泄露的再反思

    .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 年轻人的“职场羞耻感”,无处不在

    年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

    外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top