Rust语言之哈希表

文章目录

  • 哈希表(Hash map)
    • 一、新建哈希表
    • 二、访问某个元素
      • 索引访问
      • GET方法
    • 二、插入新元素
    • 三、遍历哈希表
    • 四、检查某个元素是否存在
      • contains_key方法
      • entry方法
    • 五、元素更新
      • 使用contains_key+insert 的方法
      • 使用entry方法
  • 六、删除元素


Rus设计语言官方教程

哈希表(Hash map)

哈希表也是集合中的一种,也是最常用的集合形式,目前Rust语言核心部分没有对哈希表进行实现,是使用标准库提供的。

一、新建哈希表

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);println!("{:?}",scores); //{"Yellow": 50, "Blue": 10}
}

二、访问某个元素

索引访问

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);println!("value: {}",scores["Blue"]); // 10
}

GET方法

官方教程上的方法

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);let team_name = String::from("Blue");let score = scores.get(&team_name).copied().unwrap_or(0);println!("value: {}",score); // 10
}

以上两种方法都必须保证访问的元素存在,否则会报错

二、插入新元素

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);println!("{:?}",scores); //{"Yellow": 50, "Blue": 10}scores.insert(String::from("Red"), 100);println!("{:?}",scores);// {"Red": 100, "Yellow": 50, "Blue": 10}
}

这里可以看出,哈希表中的元素是没有顺序的

三、遍历哈希表

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);for (key, value) in &scores {println!("{key}: {value}");}
}=>
Yellow: 50
Blue: 10

四、检查某个元素是否存在

Rust语言中检查哈希表元素是否存在,有两种方法,contains_key方法和entry

  • contains_key方法用于检查HashMap中是否包含特定的键。它返回一个布尔值,指示键是否存在。
  • entry方法用于高效地处理键值对的插入和更新,它返回一个Entry枚举,可以是Occupied(键已存在)或Vacant(键不存在)。

contains_key方法

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);if scores.contains_key("Red"){println!("value :{}",scores["Red"]);}else {println!("Red is not found")}
}=>Red is not found

entry方法

entry方法多用于对值的更新,eor_insert方法在键对应的值存在时就返回这个值的可变引用,如果不存在则将参数作为新值插入并返回新值的可变引用

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);scores.entry(String::from("Red")).or_insert(100);scores.entry(String::from("Blue")).or_insert(50);println!("{:?}", scores);//{"Blue": 10, "Red": 100, "Yellow": 50}
}

五、元素更新

使用contains_key+insert 的方法

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);let team_list =["Blue","Red"];for i in team_list{if scores.contains_key(i){scores.insert(i.to_string(), scores[i]+50);}else{scores.insert(i.to_string(), 50);}}println!("{:?}",scores);//{"Red": 50, "Blue": 60, "Yellow": 50}
}

使用entry方法

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);let team_list =["Blue","Red"];for i in team_list{let count = scores.entry(i.to_string()).or_insert(0);*count += 50;}println!("{:?}",scores);//{"Red": 50, "Blue": 60, "Yellow": 50}
}

相比使用contains_key+insert 的方法,这种方法更优雅。

六、删除元素

fn main() {  use std::collections::HashMap;let mut scores = HashMap::new();scores.insert(String::from("Blue"), 10);scores.insert(String::from("Yellow"), 50);scores.insert(String::from("Red"), 80);println!("{:?}",scores);//{"Blue": 10, "Yellow": 50, "Red": 80}scores.remove("Red");println!("{:?}",scores);//{"Blue": 10, "Yellow": 50}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/680330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面详细对比@Resource和@Autowired

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Resource和Autowired概述 在Java的Spring框架中,Resource和Autowired都是用于实现依赖注入(Dependency Injection, DI)的重要注解。依赖…

洛谷UVA题目Unknown Error

UnexpectedResponseStatus: expect status code: 301 Moved Permanently on https://onlinejudge.org/index.php?optioncom_comprofiler&tasklogin, got: 200 OK 如果你绑定了账号,去原站Online Judge - Home 登录一下,好久没登陆,需要激…

[2-远程开发-01]idea远程连接开发

背景 因为本次的项目使用到一些网络相关的库只在linux可使用,项目本身也会在linux运行,而且如果在mac上进行开发的话,也涉及到部署的问题,而且也不能调试。 所以直接在本专栏第一篇的centos主机上进行开发,以远程连接…

Junit常用断言

0.断言简介 断言:assert Q:断言的作用 更方便的对结果进行判定 "有针对性"的if判断 针对两个变量值是否相同 使用assertEquals针对两个对象是否相同 使用assertSame针对返回值是否为True 使用assertTrue 1.断言的参数 assertXXX(”断言失败时提升的信息“&#x…

MD5 哈希

md5DigestAsHex 是 Spring Framework 中 DigestUtils 类的一个方法,用于计算 MD5 哈希并返回十六进制表示的字符串。这个方法的主要作用是将输入的字节数组进行 MD5 哈希处理,并返回结果的十六进制表示形式。 MD5(Message Digest Algorithm …

【开源】SpringBoot框架开发校园疫情防控管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、系统展示四、核心代码4.1 新增健康情况上报4.2 查询健康咨询4.3 新增离返校申请4.4 查询防疫物资4.5 查询防控宣传数据 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBoot…

C# Thread的使用

在C#中,线程用于实现程序的并发执行。通过创建和管理多个线程,可以同时处理不同的任务或操作,从而提高程序性能和响应性。以下是如何在C#中使用线程的基本步骤: 创建新线程 // 使用System.Threading命名空间 using System.Threa…

【Java程序设计】【C00253】基于Springboot的在线考试管理系统(有论文)

基于Springboot的在线考试管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的在线考试系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块:系统登录,管理…

WordPress后台编辑个人资料页面直接修改用户名插件Change Username

前面跟大家介绍了『如何修改WordPress后台管理员用户名?推荐2种简单方法』一文,但是对于新站长或者有很多用户的站长来说,操作有点复杂,所以今天向大家推荐一款可以直接在WordPress后台编辑个人(用户)资料页…

网络安全漏洞管理十大度量指标

当前,网络安全漏洞所带来的风险及产生的后果,影响到网络空间乃至现实世界的方方面面,通信、金融、能源、电力、铁路、医院、水务、航空、制造业等行业各类勒索、数据泄露、供应链、钓鱼等网络安全攻击事件层出不穷。因此,加强对漏…

python打印圆形

要打印一个圆形,你可以使用turtle模块来绘制图形。以下是一个示例代码: import turtledef draw_circle(radius):turtle.penup()turtle.goto(0, -radius)turtle.pendown()turtle.circle(radius)# 调整画笔速度(可选) turtle.speed…

【GameFramework框架内置模块】1、全局配置(Config)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q7…

vue安装使用less,解决与webpack的冲突

第077个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 提供vue2的一些基本操作:安装、引用,模板使用,computed&a…

Git分支规范和迭代流程

Git分支 feature分支:功能分支 dev分支:开发分支 test分支:测试分支 master分支:生产环境分支 hotfix分支:bug修复分支。从master拉取,修复并测试完成merge回master和dev。 某些团队可能还会有 reale…

Day47- 动态规划part15

一、不同的子序列 题目一:115. 不同的子序列 115. 不同的子序列 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 7 取模。 定义一个二维数组dp,其中dp[i][j]表示s的前i个字符中t的前j个字符…

Codeforces Round 924 (Div. 2)

Codeforces Round 924 (Div. 2) Codeforces Round 924 (Div. 2) A. Rectangle Cutting 题意:给出a*b的矩形,沿着其中一个边恰好一分为二后可以组成一个新的矩形 思路:判断其中一个边是否可以被2整除以及二分后是否等于另一个边即可 AC cod…

三、案例 - MySQL数据迁移至ClickHouse

MySQL数据迁移至ClickHouse 一、生成测试数据表和数据1.在MySQL创建数据表和数据2.在ClickHouse创建数据表 二、生成模板文件1.模板文件内容2.模板文件参数详解2.1 全局设置2.2 数据读取(Reader)2.3 数据写入(Writer)2.4 性能设置…

快速学习Spring

Spring 简介 Spring 是一个开源的轻量级、非侵入式的 JavaEE 框架&#xff0c;它为企业级 Java 应用提供了全面的基础设施支持。Spring 的设计目标是简化企业应用的开发&#xff0c;并解决 Java 开发中常见的复杂性和低效率问题。 Spring常用依赖 <dependencies><!-…

第十二周学习报告

比赛 参加了一场 div 2 &#xff0c;B 题&#xff0c;C 题没写出来&#xff0c;B 是一个排序去重&#xff0b;双指针&#xff0c;C题是要观察出一个数学结论&#xff08;因为数据范围太大&#xff0c;我暴力做直接超时了&#xff09; 排 6253 &#xff0c;表现分是 998 &…