插入键值对
本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 29 课,共 66 课。
现在你有了一个空的哈希映射,是时候向其中添加一些数据了。你可以使用 .insert() 方法向哈希映射中插入键值对:
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");.insert() 方法接受两个参数:键和值。在这个示例中,我们将国家名称作为键,将它们的首都作为值存储。
有一个重要的行为需要记住:如果你在哈希映射中插入一个已经存在的键,新值会覆盖旧值:
capitals.insert("France", "Lyon"); // 这会覆盖 "Paris"执行此操作后,查找 "France" 会返回 "Lyon",而不是 "Paris"。这种覆盖行为让 .insert() 既可以添加新条目,也可以更新哈希映射中的现有条目。
挑战
简单你会收到 3 个输入:一个产品名称、它的价格(小数)以及另一个产品名称。创建一个可变哈希映射,用产品名称作为键(类型为 String),用价格作为值(类型为 f64)。将第一个产品及其价格插入哈希映射。然后以 0.0 作为价格插入第二个产品。最后,再次插入第二个产品并设置新价格 15.99,以此更新它的价格。按照下方显示的确切格式打印所有信息。
关于 .clone() 的说明:将 String 变量作为键插入 HashMap 时,根据 Rust 的所有权规则,该变量会被移动到映射中,之后便无法再使用。若要继续使用该变量(例如,用于打印或再次插入),请在将它传给 insert() 时调用 .clone()。例如:map.insert(name.clone(), price)。
要求:
- 从
std::collections导入HashMap - 创建类型为
HashMap<String, f64>的可变哈希映射 - 读取第一个输入作为第一个产品名称
- 读取第二个输入,并将其转换为
f64,作为第一个产品的价格 - 使用产品名称上的
.clone(),将第一个产品及其价格插入哈希映射 - 读取第三个输入作为第二个产品名称
- 使用产品名称上的
.clone(),以0.0作为价格插入第二个产品 - 使用
.clone()再次插入第二个产品,并将价格设为15.99(这会覆盖之前的值) - 按照下方显示的确切格式打印两个产品的信息
输入:
- 第一行:第一个产品名称(例如,
Laptop) - 第二行:第一个产品的价格,为小数(例如,
999.99) - 第三行:第二个产品名称(例如,
Mouse)
输出:
- 第一行:
Inserted [first_product] at $[price] - 第二行:
Inserted [second_product] at $0.00 - 第三行:
Updated [second_product] to $15.99
亲手试试
use std::collections::HashMap;
use std::io;
fn main() {
// 读取输入
let mut product1 = String::new();
io::stdin().read_line(&mut product1).expect("Failed to read line");
let product1 = product1.trim().to_string();
let mut price1_input = String::new();
io::stdin().read_line(&mut price1_input).expect("Failed to read line");
let price1: f64 = price1_input.trim().parse().expect("Failed to parse price");
let mut product2 = String::new();
io::stdin().read_line(&mut product2).expect("Failed to read line");
let product2 = product2.trim().to_string();
// TODO: 在下方编写你的代码
// 创建一个可变的 HashMap,插入商品,并打印所需的输出
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Rust 在线编译器