文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-30 02:38

关注

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

什么是map?

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

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."),
    }
}

运行结果:

Alice's score is: 100

[Done] exited with code=0 in 0.689 seconds

在上面的示例中,创建了一个名为scores的HashMap,并且将三个键值对插入其中。使用get方法来检索 "Alice" 的分数。

在 Rust 语言还是挺好用的这些匹配规则。

基本操作

1.插入和更新值

如果你要向HashMap中插入新的键值对,可以使用insert方法。如果键已经存在,它将把值覆盖掉。

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

2.获取值

要获取HashMap中的值,可以使用get方法,和 Java 是不是很类似。如果键不存在,它会返回一个Option。

// let alice_score = scores.get("test"); // 键不存在,将会打印出 None
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."),
}

3.删除值

还可以对HashMap中的键值对进行删除操作,可以使用remove方法。

scores.remove("Bob");

4.遍历

除上面增删改操作,还有一个重要的,如果遍历HashMap中的所有键值,这里使用迭代器。

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);
    }
}

遍历结果:

Charlie: 95
Alice: 105
Bob: 90

[Done] exited with code=0 in 0.521 seconds

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

5.默认值

首先,来看第一个,默认值,这个作用是如果键不存在,你可以使用entry方法来设置默认值。

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

6.更新值

另外还可以使用entry方法来更新值,这就更加有意思了,可以让你在在原有值的基础上执行操作,用起来也是挺爽是不是。

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

7.排序

最后一个,如果需要按键或值对HashMap进行排序,你可以将它们提取到Vec中,然后使用sort方法来排序。

let mut score_vec: Vec<(&str, &i32)> = scores.iter().collect();
score_vec.sort_by(|a, b| b.1.cmp(a.1));  // 按值降序排序

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

元素比较使用cmp方法,它返回一个排序顺序,对于整数的话,它可以是Ordering::Less、Ordering::Equal或Ordering::Greater,分别表示“小于”、“等于”或“大于”这样比较。

最后

总结, Rust 中的HashMap是一个强大的数据结构,用于存储和操作键值对。今天主要介绍常规用法、常见操作和一些技巧,希望对你有所帮助。

来源:码农渔夫内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯