Menu
CoddyTech

插入键值对

本课属于 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() 既可以添加新条目,也可以更新哈希映射中的现有条目。

challenge icon

挑战

简单

你会收到 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,插入商品,并打印所需的输出
    
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Rust 在线编译器