Rust HashMap详解及单词统计示例

在Rust中,HashMap是一种非常有用的数据结构,用于存储键值对。本文将深入介绍HashMap的特性,以及通过一个单词统计的例子展示其用法。

HashMap简介

HashMap是Rust标准库提供的用于存储键值对的数据结构。它允许通过键快速查找对应的值,是一个非常高效的数据结构。以下是一些关键特性:

  • 数据存储在堆上:HashMap的数据存储在堆上,使其具有动态大小,可以根据需要进行扩展或收缩。

  • 同构的:在一个HashMap中,所有的键(K)必须是同一种类型,所有的值(V)也必须是同一种类型。

创建和插入键值对

rust 复制代码
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 60);

这段代码创建了一个HashMap实例scores,并插入了两个键值对,键为字符串类型,值为整数类型。

使用zipcollect创建HashMap

rust 复制代码
let teams = vec![String::from("Blue"), String::from("Yellow")];
let initial_scores = vec![10, 50];
let scores: HashMap<_, _> = teams.iter().zip(initial_scores.into_iter()).collect();

在这里,通过zip将两个Vec合并为一个元素为元组的迭代器,然后使用collect方法将迭代器转换为HashMap

HashMap和所有权

HashMap对于实现了Copy trait的类型,如i32,会复制值到HashMap中。对于拥有所有权的值,如String,则会移动值,所有权转移给HashMap

rust 复制代码
let field_name = String::from("Favorite color");
let field_value = String::from("Blue");

let mut map = HashMap::new();
map.insert(&field_name, &field_value);

在这个例子中,我们插入了field_namefield_value的引用,而不是移动它们。在HashMap有效期内,被引用的值必须保持有效。

访问和遍历HashMap

rust 复制代码
let team_name = String::from("Blue");
let score = scores1.get(&team_name);
match score {
    None => println!("Team not exist"),
    Some(s) => println!("Score: {}", s),
}

for (k, v) in &scores1 {
    println!("{}: {}", k, v);
}

通过get方法可以根据键获取值,返回一个Option<&V>。通过遍历HashMap,我们可以访问其中的所有键值对。

更新HashMap

rust 复制代码
let mut scores11 = HashMap::new();
scores11.insert(String::from("Blue"), 10);
scores11.insert(String::from("Blue"), 20);

// 使用entry方法检查键是否存在,不存在时插入新值
scores11.entry(String::from("Yellow")).or_insert(50);
scores11.entry(String::from("Blue")).or_insert(50);

HashMap的大小是可变的,每个键同时只能对应一个值。通过entry方法可以检查键是否存在,不存在时使用or_insert方法插入新值。

单词统计示例

rust 复制代码
let text = "hello world wonderful world";

let mut map = HashMap::new();
for word in text.split_whitespace() {
    let count = map.entry(word).or_insert(0);
    *count += 1;
}
println!("{:#?}", map);

这段代码展示了如何使用HashMap进行单词统计。通过遍历文本中的单词,使用entry方法检查单词是否存在,不存在时插入新值。最终,得到一个包含每个单词及其出现次数的HashMap

HashMap在Rust中是一个强大的工具,通过合理使用可以简化很多与键值对相关的问题。在实际开发中,我们可以充分利用其特性,提高代码的效率和可读性。

相关推荐
tmlx3I08111 分钟前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-20 分钟前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~35 分钟前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
明理的信封38 分钟前
AI 基础设施的“去 Python 化“:Rust 与 C# 的两条替代路径
人工智能·python·rust
ysa05103043 分钟前
【板子】ST表
c++·笔记·算法·板子
CHHH_HHH1 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
hurrycry_小亦1 小时前
洛谷题目:P1215 [USACO1.4] 母亲的牛奶 Mother‘s Milk 题解(本题简)
算法
KJ_BioMed2 小时前
从PDB到高亲和力分子:De novo生成式计算化学Pipeline剖析
算法·生物医药·生物科研·科研干货·化合物设计
一个王同学3 小时前
从零到一 | CV转多模态大模型 | week17 | LLM 推理优化 & vLLM 详解
人工智能·深度学习·算法·机器学习·计算机视觉·vllm
旖-旎5 小时前
《LeetCode 53 最大子数组和 || LeetCode 918 环形子数组的最大和》
c++·算法·leetcode·动态规划