Вставка пар «ключ-значение»
Часть раздела 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() полезным как для добавления новых записей, так и для обновления существующих в вашей хэш-карте.
Задание
ЛегкоВы получите три входных значения: название продукта, его цену (в виде десятичного числа) и название другого продукта. Создайте изменяемую хеш-карту (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, добавьте продукты и выведите требуемый результат
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента