Menu
Coddy logo textTech

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

Часть раздела Логика и управление потоком путешествия по 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

Задание

Легко

Вы получите три входных значения: название продукта, его цену (в виде десятичного числа) и название другого продукта. Создайте изменяемую хеш-таблицу для хранения названий продуктов в качестве ключей (тип 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

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

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