【Rust自学】8.6. HashMap Pt.2:更新HashMap
📅 2026/7/23 18:49:55
👁️ 次浏览
8.6 HashMap Pt.2更新HashMap8.6.0. 本章内容第八章主要讲的是 Rust 中常见的集合。Rust 提供了很多集合类型的数据结构这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。第八章中的集合是存储在堆内存上而非栈内存上的这也意味着这些集合的数据大小无需在编译时就确定在运行时它们可以动态地变大或变小。本章主要会讲三种集合Vector、String 和HashMap本文。8.6.1. 更新 HashMapHashMap的大小可变指的是其中的键值对数量可变。但是在任意时刻一个键只能对应一个值。当想要更新HashMap中的数据时可能有这么几种情况- 想要更新的键在HashMap中已经存在对应的值- 用新的值替换现有的值- 保留现有的值忽略新的值- 合并现有的值和新的值也就是说对现有的值进行修改键不存在添加一对键和值1. 替换现有的值如果向HashMap插入一对键值对但键已经存在程序就会把新值赋给这个键覆盖旧值。如下例use std::collections::HashMap; fn main() { let mut scores HashMap::new(); scores.insert(String::from(dev1ce), 0); scores.insert(String::from(dev1ce), 60); println!({:?}, scores); }这里为同一个键赋了两次值第一次是0第二次是60。第一次的值会被第二次覆盖也就是说最终dev1ce对应的值是60。输出{dev1ce: 60}2. 只在键不存在值时才插入这是最常见的情况。对于这种情况首先需要检查原HashMap中是否已经存在这个键如果不存在再插入新值。Rust 提供了entry方法来检查原HashMap中是否已经存在这个键。它的参数是键返回值是一个Entry枚举表示值是否存在。看个例子use std::collections::HashMap; fn main() { let mut scores HashMap::new(); scores.insert(String::from(dev1ce), 0); let e scores.entry(String::from(dev1ce)); println!({:?}, e); }这是键已经存在的情况。输出Entry(OccupiedEntry { key: dev1ce, value: 0, .. })也就是说如果键已经存在那么entry方法会返回一个占用中的 entryOccupiedEntry并关联已经存在的键值对。再试一下键不存在的情况。代码如下use std::collections::HashMap; fn main() { let mut scores HashMap::new(); scores.insert(String::from(dev1ce), 0); let e scores.entry(String::from(Zywoo)); println!({:?}, e); }输出Entry(VacantEntry(Zywoo))如果键不存在就会返回一个空缺的 entryVacantEntry并关联这个新的键。现在有办法检查原HashMap中是否已经存在这个键了那么如何根据是否存在来决定插入或不插入呢Rust 在Entry上提供了or_insert方法其参数是想要添加的值。它会根据 entry 是占用还是空缺来决定是否插入如果 entry 已被占用键已存在就保留现有值、不插入新值如果 entry 空缺键不存在就插入传入的值。最重要的一点是它有返回值该键对应值的可变引用。如果键已存在就返回HashMap中原有值的可变引用如果键不存在就先插入键值对再返回插入值的可变引用。利用这个特性可以实现一些简单的计数器后文会讲。看下例子use std::collections::HashMap; fn main() { let mut scores HashMap::new(); scores.insert(String::from(dev1ce), 0); scores.entry(String::from(Zywoo)).or_insert(100); scores.entry(String::from(dev1ce)).or_insert(60); println!({:?}, scores); }第一个entry语句查找Zywoo没有找到就返回空缺的 entryor_insert会根据该键和传入的参数100创建(Zywoo, 100)这个键值对。第二个entry语句查找dev1ce已经找到就返回占用中的 entryor_insert不会插入新值因此(dev1ce, 0)保持不变。输出键的顺序可能不同{Zywoo: 100, dev1ce: 0}如果这么讲还有些复杂那么你可以把scores.entry(String::from(Zywoo)).or_insert(100);看作两行代码let e scores.entry(String::from(Zywoo)); e.or_insert(100);3. 基于现有值来更新先看例子use std::collections::HashMap; fn main() { let text Thats one small step for [a] man, one giant leap for mankind.; let mut map HashMap::new(); for word in text.split_whitespace() { let count map.entry(word).or_insert(0); *count 1; } println!({:#?}, map); }首先声明了一个包含一句话的字符串字面值赋给text。然后创建了名为map的HashMap。接着使用for循环。text.split_whitespace()把text分割成字符串迭代器再用for来遍历。遍历时判断每个单词是否已出现在map中出现了就不插入新值没出现就插入0作为该键的新值。关键是理解count因为or_insert的返回值是该键对应值的可变引用所以每出现一次这个单词就把可变引用解引用后加1相当于完成一次计数。8.6.2. Hash 函数在默认情况下HashMap使用加密强度较高的哈希函数可以抵抗拒绝服务DoS攻击。但这种函数并不是可用的最快哈希算法它的优势是具有更好的安全性。如果觉得它性能不够好也可以指定不同的 hasher 来切换到另一个函数。hasher 指的是实现了BuildHashertrait 的类型。
1. 项目概述:构建企业级可信AI知识库的核心价值在信息爆炸的时代,企业面临的最大挑战已经从获取信息转变为如何高效管理和利用海量知识。"告别幻觉"这个标题直指当前大模型应用中最棘手的痛点——生成内容的不可靠性。我们团队基于蓝耘元生代云…
📅 2026/7/23 18:48:55
7.5 use关键字 Pt.2 :重导出与换国内镜像源教程
7.5.1. 使用pub use重新导出名称
使用use将路径导入作用域内后,该名称在词法作用域内是私有的。
以 7.4. use关键字 Pt.1:use的使用与as关键字 的代码为例:
mod front_of_house…
📅 2026/7/23 18:48:55
一、先明确你的硬件核心限制
配置:i7-4710MQ(4 核 8 线程)+16G DDR3+GTX960M 4G 移动端显存 致命瓶颈:仅 4G 独立显存,移动端 GPU 算力弱、CUDA 最高仅支持 10.2/11.1,新版 PyTorch 不兼容;全量训练极易 OOM 显存溢出。 仅能做小型模型从零训练、轻量大模型 LoRA 微调、…
📅 2026/7/23 18:48:55
题目
2025春秋杯网络安全联赛冬季赛\MISC\流量分析与协议\流量中的秘密解题
打开流量包查看HTTP对象
题目说黑客上传了一个可疑的文件,发现upload.php页面确实有一个可疑的上传请求查看可疑请求的流对话
在流对话中,发现了上传了一个png图片观察PNG图片信…
📅 2026/7/23 19:58:30
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
📅 2026/7/23 19:58:30
题目
第三届 SHCTF 公开赛道 - web - ez_ping
域名测试系统中真的只能测试域名吗?我不相信!解题思路
打开网页测试功能
127.0.0.1测试后缀查询当前目录
我测试了
127.0.0.1 | dir
127.0.0.1 | ls
127.0.0.1 & dir
127.0.0.1 & ls
127.0.0.1 &…
📅 2026/7/23 19:58:30
很多企业刚开始做GEO优化时,第一反应是:是不是多发点文章,让AI多看到几次品牌名,就能被推荐?
这个想法很常见,但也很容易走偏。
AI搜索不是简单统计“谁出现次数多”。如果内容只是重复公司介绍、堆砌业务关…
📅 2026/7/23 19:58:30
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
📅 2026/7/23 19:58:30
作为一个在政府信息化部门摸爬滚打了多年的老家伙,我太知道每次做“指挥中心大屏”项目选型时的痛苦了。今天这篇文章,我不跟你讲虚的,就结合我最近一次实操选型经历,聊聊市面上主流的AI数据大屏生成工具到底该怎么选。我会从使用…
📅 2026/7/23 19:57:28
更多请点击:
https://intelliparadigm.com
第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…
📅 2026/7/23 0:00:26
最近好多同行在群里问 geo s1230 到底值不值得买。说实话,这机器在二手市场挺火。但水很深,新手很容易踩雷。我干了十年设备维护,见过太多冤大头。今天不扯虚的,直接上干货。先说价格,心里得有底。目前成色不错的二手货,大概在一万二到一万五之间。如果低于八千,别犹豫,…
📅 2026/7/23 0:01:16
更多请点击:
https://codechina.net
第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现࿱…
📅 2026/7/23 0:01:26
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/23 1:06:38
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/23 1:06:38
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/23 1:06:38
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/23 7:06:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/23 17:07:28
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/23 5:06:50