Итерация по Hash Map
Часть раздела Логика и управление потоком путешествия по Rust на Coddy. Урок 31 из 66.
Иногда нужно просмотреть каждую пару ключ-значение в вашей хеш-таблице, а не искать определённые ключи. Rust предоставляет простой способ перебрать все данные с помощью цикла for:
for (key, value) in &my_map {
println!("{}: {}", key, value);
}Обратите внимание на & перед my_map — это создаёт ссылку на хеш-таблицу, поэтому вы можете выполнять итерацию, не забирая право владения. Цикл предоставляет каждую пару ключ-значение в виде кортежа, который можно напрямую деструктурировать в объявлении цикла.
Вот практический пример со списком цен:
let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);
for (item, price) in &prices {
println!("{} costs ${:.2}", item, price);
}Важно помнить одну деталь: hash maps не гарантируют определённый порядок итерации. При каждом запуске программы пары могут выводиться в другой последовательности. Это происходит потому, что hash maps отдают приоритет быстрому поиску, а не сохранению порядка вставки, поэтому при итерации не рассчитывай, что item будут появляться в какой-либо определённой последовательности.
Задание
ЛегкоВы получите целое число n, обозначающее количество пар «студент—оценка» для обработки. Затем вы получите n пар inputs: имя student, за которым следует его оценка за тест (как целое число). Create hash map для хранения имён student в качестве ключей и их оценок в качестве значений. После вставки всех пар Iterate по hash map и выведите имя и оценку каждого student.
Требования:
- Импортируйте
HashMapизstd::collections - Create mutable hash map с типами
HashMap<String, i32> - Прочитайте первый input и преобразуйте его в
i32, чтобы получить количество пар - Используйте цикл для чтения
nпар inputs (имя student, затем score) - Вставьте каждое имя student и score в hash map
- Используйте цикл
forдля итерации по hash map с помощью&map - Выведите информацию о каждом student в формате:
[name]: [score] - Выводите пары в любом порядке (hash maps не гарантируют порядок)
Ввод:
- Первая строка: целое число
n(например,3) - Следующие
nпары строк:- Имя student (например,
Alice) - Оценка за тест как целое число (например,
95)
- Имя student (например,
Вывод:
- Одна строка для каждого student в формате:
[name]: [score] - Порядок строк вывода может различаться в разных запусках тестов
Попробуйте сами
use std::collections::HashMap;
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Считать количество пар студент-оценка
let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
// Создать изменяемую хеш-таблицу для хранения имён студентов и оценок
let mut students: HashMap<String, i32> = HashMap::new();
// TODO: Напишите ваш код ниже
// Считать n пар входных данных (имя студента и оценка) и вставить их в хеш-таблицу
// TODO: Пройти по хеш-таблице и вывести имя и оценку каждого студента
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Итоги: поиск элементаПотренируйтесь самостоятельно: Онлайн-компилятор Rust