Rust HashMap

一、HashMap是什么,怎么用

1、HashMap是什么

HashMap 也是 Rust 标准库中提供的集合类型,但是又与动态数组不同,HashMap 中存储的是一一映射的 KV 键值对,并提供了平均时间复杂度为 O(1) 的查询方法

2、HashMap怎么用

(1)创建哈希表

使用new 方法创建

use std::collections::HashMap;//注意要导入包// 创建一个HashMap,用于存储宝石种类和对应的数量
let mut my_gems = HashMap::new();// 将宝石类型和对应的数量写入表中
my_gems.insert("红宝石", 1);
my_gems.insert("蓝宝石", 2);
my_gems.insert("河边捡的误以为是宝石的破石头", 18);

使用collection创建

fn main() {use std::collections::HashMap;let teams_list = vec![("中国队".to_string(), 100),("美国队".to_string(), 10),("日本队".to_string(), 50),];let teams_map: HashMap<_,_> = teams_list.into_iter().collect();println!("{:?}",teams_map)
}

元组数据直接创建

use std::{collections::HashMap};
fn main() {let teams = [("Chinese Team", 100),("American Team", 10),("France Team", 50),];let mut teams_map1 = HashMap::new();for team in &teams {teams_map1.insert(team.0, team.1);}let teams_map2 = HashMap::from(teams);assert_eq!(teams_map1, teams_map2);println!("Success!")
}

(2)哈希表的元素所有权转移

即放入元素到哈希表中也会发生所有权转移

fn main() {use std::collections::HashMap;let name = String::from("Sunface");let age = 18;let mut handsome_boys = HashMap::new();handsome_boys.insert(name, age);println!("因为过于无耻,{}已经被从帅气男孩名单中除名", name);println!("还有,他的真实年龄远远不止{}岁", age);
}

(3) 获取哈希表中的元素

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: Option<&i32> = scores.get(&team_name);
  1. get 方法返回一个 Option<&i32> 类型:当查询不到时,会返回一个 None,查询到时返回 Some(&i32)
  2. &i32是对 HashMap 中值的借用,如果不使用借用,可能会发生所有权的转移

(4)遍历哈希表中的元素

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

(5)哈希表插入新值

fn main() {use std::collections::HashMap;let mut scores = HashMap::new();scores.insert("Blue", 10);
}

(6)没有则插入

fn main() {use std::collections::HashMap;let mut scores = HashMap::new();scores.insert("Blue", 10);// 查询Yellow对应的值,若不存在则插入新值let v = scores.entry("Yellow").or_insert(5);assert_eq!(*v, 5); // 不存在,插入5
}

(7)已有则更新

fn main() {use std::collections::HashMap;let mut scores = HashMap::new();scores.insert("Blue", 10);// 覆盖已有的值let old = scores.insert("Blue", 20);//覆盖assert_eq!(old, Some(10));}

在这里插入图片描述

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

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

相关文章

elementui的el-select+el-tree+el-input实现可搜索的下拉树组件

部分实现代码如下 <template> <div><el-selectv-model"item.TableName"placeholder"请选择":disabled"!item.disabled"visible-change"handleVisible"ref"TableName"><el-input placeholder"请输…

RustGUI学习(iced)之小部件(三):如何使用下拉列表pick_list?

前言 本专栏是学习Rust的GUI库iced的合集&#xff0c;将介绍iced涉及的各个小部件分别介绍&#xff0c;最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个&#xff0c;目前处于发展中&#xff08;即版本可能会改变&#xff09;&#xff0c;本专栏基于版本0.12.1. 概述…

el-tree动态设置是否全部展开属性,值已经改变,但是没有展开或折叠

项目场景&#xff1a;使用el-tree组件&#xff0c;搜索后动态设置数据全部展示 问题描述 el-tree动态设置是否全部展开属性&#xff0c;值已经改变&#xff0c;但是没有展开 <el-selectv-model"TableName"placeholder"请选择"><el-input placeho…

Objective-C大爆炸:从零到单例模式

oc学习笔记&#xff08;一&#xff09; 文章目录 oc学习笔记&#xff08;一&#xff09;oc与c语言的区别#import的用法foundation框架NSLog函数NSString类型符号的作用oc中的数据类型 类与对象概念&#xff1a; 创建第一个类类的定义类的实现类加载对象的产生和使用 self语法id…

最新springboot家乡特色推荐系统

采用技术 最新springboot家乡特色推荐系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能 系统首页 用户注册 文章分享 个人中心 管理员模…

经典文献阅读之--EarlyBird(用于BEV中多视图跟踪的早期融合)

0. 简介 多视角聚合技术有望克服多目标检测和跟踪中的遮挡和漏检问题。最近的多视角检测和三维物体检测方法通过将所有视角投影到地面平面上&#xff0c;并在鸟瞰图中进行检测&#xff0c;取得了巨大的性能提升。《EarlyBird: Early-Fusion for Multi-View Tracking in the Bi…

AtCoder Beginner Contest 351 A-F题解

比赛链接&#xff1a;https://atcoder.jp/contests/abc351比赛时间&#xff1a;2024 年 4 月 27 日 20:00-21:40 A题&#xff1a;The bottom of the ninth 标签&#xff1a;循环、模拟题意&#xff1a;给定 A A A队 9 9 9局的得分和 B B B队 8 8 8局的得分。求 B B B队的第 9…

面试经典150题——反转字符串中的单词

面试经典150题 day21 题目来源我的题解方法一 双指针方法二 库函数正则匹配方法三 自定义函数方法四 双端队列 题目来源 力扣每日一题&#xff1b;题序&#xff1a;151 我的题解 方法一 双指针 先将首尾的空格删除&#xff0c;然后使用两个指针从后往前遍历&#xff0c;end指…

strcpy,strncpy函数详解

strcpy函数 在C语言中&#xff0c;strcpy()函数用于将一个字符串复制到另一个字符串中。 函数原型如下&#xff1a; char *strcpy(char *destination, const char *source);参数解释&#xff1a; destination&#xff1a;目标字符串&#xff0c;将会被复制到。source&#…

(iFlyCode、FREEGPT、Copilot、AIPlus、稳定高效)分享好用的ChatGPT

目录 1、iFlyCode 2、FREEGPT 3、Microsoft Copilot: 你的日常 AI 助手 4、AIPlus

Ubuntu中常用的解/压缩命令

Ubuntu中常用的解/压缩命令 一、tar文件tar.tgz文件tar.gz文件tar.bz文件tar.bz2文件tar.Z文件 二、zip文件三、rar文件四、gz文件五、bz文件bz2文件 六、Z文件七、tgz文件八、lha文件 一、tar文件 解压&#xff1a;tar xvf FileName.tar 压缩&#xff1a;tar cvf FileName.ta…

Servlet(三个核心API介绍以及错误排查)【二】

文章目录 一、三个核心API1.1 HttpServlet【1】地位【2】方法 1.2 HttpServletRequest【1】地位【2】方法【3】关于构造请求 1.3 HttpServletResponse【1】地位【2】方法 四、涉及状态码的错误排查&#xff08;404……&#xff09;五、关于自定义数据 ---- body或query String …

计算机网络 备查

OSI 七层模型 七层模型协议各层实现的功能 简要 详细 TCP/IP协议 组成 1.传输层协议 TCP 2.网络层协议 IP 协议数据单元&#xff08;PDU&#xff09;和 封装 数据收发过程 数据发送过程 1. 2.终端用户生成数据 3.数据被分段&#xff0c;并加上TCP头 4.网络层添加IP地址信息…

nuxt3使用记录五:禁用莫名其妙的Tailwind CSS(html文件大大减小)

发现这个问题是因为&#xff0c;今天我突然很好奇&#xff0c;我发现之前构建的自动产生的200.html和404.html足足290k&#xff0c;怎么这么大呢&#xff1f;不是很占用我带宽&#xff1f; 一个啥东西都没有的静态页面&#xff0c;凭啥这么大&#xff01;所以我就想着手动把他…

用Typescript写自动化工作流

项目地址&#xff1a;acao 挺早之前写过一个工具帮我构建项目并发布到指定平台&#xff0c;主要流程就是获取项目根目录下的配置文件&#xff0c;然后根据配置文件在本地通过 docker 构建一个镜像然后 push 到镜像仓库&#xff0c;最后通过 ssh 连接指定的服务区执行发布任务 …

Github Action Bot 开发教程

Github Action Bot 开发教程 在使用 Github 时&#xff0c;你可能在一些著名的开源项目&#xff0c;例如 Kubernetes&#xff0c;Istio 中看到如下的一些评论&#xff1a; /lgtm /retest /area bug /assign xxxx ...等等&#xff0c;诸如此类的一些功能性评论。在这些评论出现…

Django-基础篇

Django是一个开放源代码的Web应用框架&#xff0c;由Python语言编写。它遵循MVC&#xff08;Model-View-Controller&#xff09;的软件设计模式&#xff0c;使开发者能够以高效、可扩展和安全的方式构建Web应用程序。 Django具有以下特点和优势&#xff1a; 强大的功能&#x…

MR混合现实情景实训教学系统在军事课堂上的应用

在现代军事教育中&#xff0c;实践教学的重要性日益凸显。传统的军事课堂教育方式往往侧重于理论知识的传授&#xff0c;而忽视了实践操作的重要性。而MR混合现实情景实训教学系统的引入&#xff0c;为军事课堂教育带来了全新的可能性。 MR混合现实情景实训教学系统是一种结合了…

面试笔记——线程池

线程池的核心参数&#xff08;原理&#xff09; public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)corePoolSize …

利用word2vec包将中文转变为词向量

代码展示&#xff1a; import jieba import re import json import logging import sys import gensim.models as word2vec from gensim.models.word2vec import LineSentence, loggerpattern u[\\s\\d,.<>/?:;\\"[\\]{}()\\|~!\t"#$%^&*\\-_a-zA-Z&…