Menu
Coddy logo textTech

Вставка пар «ключ-значение»

Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 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

Задание

Легко

Вы получите три входных значения: название продукта, его цену (в виде десятичного числа) и название другого продукта. Создайте изменяемую хеш-карту (hash map) для хранения названий продуктов в качестве ключей (тип String) и их цен в качестве значений (тип f64). Вставьте первый продукт с его ценой в хеш-карту. Затем вставьте второй продукт с ценой 0.0. Наконец, обновите цену второго продукта на 15.99, вставив его снова с новой ценой. Выведите всю информацию в точном формате, показанном ниже.

Примечание о .clone(): При вставке переменной типа String в качестве ключа в HashMap правила владения Rust означают, что переменная будет перемещена в карту и после этого станет недоступна. Чтобы продолжать использовать переменную (например, для вывода на печать или повторной вставки), вызовите .clone() при передаче её в insert(). Например: map.insert(name.clone(), price).

Требования:

  • Импортируйте HashMap из std::collections
  • Создайте изменяемую хеш-карту с типами HashMap<String, f64>
  • Считайте первый ввод как название первого продукта
  • Считайте второй ввод и преобразуйте его в f64 для цены первого продукта
  • Вставьте первый продукт и его цену в хеш-карту, используя .clone() для названия продукта
  • Считайте третий ввод как название второго продукта
  • Вставьте второй продукт с ценой 0.0, используя .clone() для названия продукта
  • Вставьте второй продукт снова с ценой 15.99, используя .clone() (это перезапишет предыдущее значение)
  • Выведите информацию о обоих продуктах в точном формате, показанном ниже

Ввод:

  • Первая строка: Название первого продукта (например, Laptop)
  • Вторая строка: Цена первого продукта как десятичное число (например, 999.99)
  • Третья строка: Название второго продукта (например, Mouse)

Вывод:

  • Первая строка: Inserted [first_product] at $[price]
  • Вторая строка: Inserted [second_product] at $0.00
  • Третья строка: Updated [second_product] to $15.99

Шпаргалка

Чтобы вставить пары «ключ-значение» в хеш-карту, используйте метод .insert():

let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");

Метод .insert() принимает два параметра: ключ и значение.

Если вы вставите ключ, который уже существует, новое значение перезапишет старое:

capitals.insert("France", "Lyon");  // Это перезаписывает "Paris"

Такое поведение перезаписи делает .insert() полезным как для добавления новых записей, так и для обновления существующих.

Попробуйте сами

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Проверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow