赞
踩
今天我们来看一下哈希图,由于意外情况,我昨天没能上传,所以现在补上。让我们直奔主题。
哈希图存储键值对,并使用哈希函数来确定放置键/值的位置。
哈希图是 std::collections
模块的一部分。
就像向量或字符串一样,我们可以使用 new()
方法创建哈希图。
use std::collections::HashMap;
fn main() {
let mut my_map = HashMap::new();
}
我们可以使用 insert
方法将键值对插入哈希图中。
use std::collections::HashMap;
fn main() {
let mut my_map = HashMap::new();
my_map.insert("key", "value");
}
我们可以使用 get
方法访问哈希图中的值,该方法返回一个 Option<&V>
:
use std::collections::HashMap;
fn main() {
let mut my_map = HashMap::new();
my_map.insert("key", "value");
if let Some(value) = my_map.get("key") {
println!("值:{}", value);
} else {
println!("未找到键");
}
}
我们可以使用 insert
方法更新与键关联的值,如果键已经存在,则会替换现有的值:
use std::collections::HashMap;
fn main() {
let mut my_map = HashMap::new();
my_map.insert("key", "value");
if let Some(value) = my_map.get("key") {
println!("值:{}", value);
} else {
println!("未找到键");
}
my_map.insert("key", "new_value");
}
如果我们不想覆盖现有的值,可以这样做:
my_map.entry("key").or_insert("another_key_value_pair");
如果 key
存在,这行代码不会对哈希图进行任何更改,但如果不存在,它将创建一个键值对,形式如下:
{"key":"another_key_value_pair"}
方法 entry
给了我们一个表示括号中提供的值的 entry 枚举。然后我们调用 or_insert
方法,如果这已经存在,则插入一个键值对。
我们可以使用 for
循环或迭代器遍历哈希图中的键值对。
use std::collections::HashMap; fn main() { let mut my_map = HashMap::new(); my_map.insert("key", "value"); if let Some(value) = my_map.get("key") { println!("值:{}", value); } else { println!("未找到键"); } my_map.insert("key", "new_value"); for (key, value) in &my_map { println!("键:{}, 值:{}", key, value); } }
我们可以使用 len
方法获取哈希图中键值对的数量:
println!("大小:{}", my_map.len());
use std::collections::HashMap; fn main() { let text = "hello world hello rust world"; // 创建一个空的哈希图来存储单词计数 let mut word_count = HashMap::new(); // 遍历文本中的每个单词 for word in text.split_whitespace() { // 计算每个单词的出现次数 let count = word_count.entry(word).or_insert(0); *count += 1; } // 打印单词计数 for (word, count) in &word_count { println!("{}: {}", word, count); } }
std::collections
模块导入 HashMap
来在程序中使用哈希图。main
函数中:text
。word_count
的空哈希图来存储每个单词的计数。split_whitespace()
迭代输入文本中的每个单词,该方法根据空白字符拆分文本。HashMap
的 entry
方法获取单词的 Entry
。该方法返回一个表示哈希图条目的 entry 枚举。Entry
上使用 or_insert
方法来插入一个新条目,如果哈希图中不存在该单词,则将值设为 0
。否则,它返回对现有值的可变引用。+= 1
操作符来增加单词的计数。for
循环遍历 word_count
哈希图。对于每个键值对,我们打印单词及其计数。该程序将输出:
hello: 2
world: 2
rust: 1
总之,在 Rust 中,哈希图位于 std::collections
模块中,是一种高效的数据结构,用于存储键值对。本文介绍了创建、插入、访问、更新和迭代哈希图等基本操作。通过一个实际的单词计数示例,我们展示了它们在实际应用场景中的用途。哈希图提供了一种灵活而强大的方式来组织和访问数据,在 Rust 编程中是不可或缺的工具。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。