Menu
Coddy logo textTech

Доступ к значениям

Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 30 из 66.

Как только данные будут сохранены в вашей хэш-карте, вам понадобится способ их извлечения. Метод .get() позволяет искать значение по его ключу:

let value = my_map.get("some_key");

Однако есть важная деталь, которую необходимо понять: .get() не возвращает значение напрямую. Вместо этого он возвращает тип Option — встроенный тип Rust, который представляет либо «что-то», либо «ничего». Это связано с тем, что искомый ключ может отсутствовать в хеш-карте.

Когда ключ существует, .get() возвращает Some(&value) — обратите внимание на символ &, который означает, что вы получаете ссылку на значение, а не само значение. Когда ключ не существует, он возвращает None:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

Вы можете заметить, что ветка match использует Some(capital) без явного &. Это происходит потому, что Rust автоматически обрабатывает ссылку за вас в этом контексте — capital по-прежнему содержит ссылку на значение, но вам не нужно явно писать & в шаблоне. Сопоставление с образцом в Rust достаточно интеллектуально, чтобы позволить вам использовать capital напрямую, например, при его выводе на печать.

Такой подход предотвращает аварийное завершение программы при попытке доступа к несуществующему ключу. Вместо того чтобы вызывать ошибку, Rust заставляет вас обрабатывать оба варианта — когда значение найдено и когда оно отсутствует — что делает ваш код более надежным и предсказуемым.

challenge icon

Задание

Легко

Вы получите два входных значения: название страны и название столицы. Создайте хеш-карту (hash map), которая хранит названия стран в качестве ключей (тип String) и их столицы в качестве значений (тип String). Вставьте страну и её столицу в хеш-карту. Затем вы получите третье входное значение с названием другой страны для поиска. Используйте метод .get(), чтобы извлечь столицу для этой страны, и обработайте оба случая: когда страна существует в карте и когда её нет.

Примечание: .get() возвращает Option — либо Some(&value) (ссылку на значение), если ключ существует, либо None, если его нет. В ветке match вы можете написать Some(capital), и Rust автоматически обработает ссылку за вас, так что вы сможете использовать capital напрямую в инструкции печати.

Требования:

  • Импортируйте HashMap из std::collections
  • Создайте изменяемую хеш-карту с типами HashMap<String, String>
  • Прочитайте первый ввод как название страны
  • Прочитайте второй ввод как название столицы
  • Вставьте страну и столицу в хеш-карту
  • Прочитайте третий ввод как страну для поиска
  • Используйте .get() для получения столицы искомой страны
  • Используйте match для обработки Option, возвращаемого методом .get()
  • Если страна найдена, выведите: The capital of [country] is [capital]
  • Если страна не найдена, выведите: [country] not found in the map

Ввод:

  • Первая строка: Название страны для вставки (например, France)
  • Вторая строка: Название столицы (например, Paris)
  • Третья строка: Название страны для поиска (например, France или Germany)

Вывод:

  • Если искомая страна существует: The capital of [country] is [capital]
  • Если искомая страна не существует: [country] not found in the map

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

use std::collections::HashMap;
use std::io;

fn main() {
    // Прочитать название страны для вставки
    let mut country = String::new();
    io::stdin().read_line(&mut country).expect("Failed to read line");
    let country = country.trim().to_string();
    
    // Прочитать название столицы
    let mut capital = String::new();
    io::stdin().read_line(&mut capital).expect("Failed to read line");
    let capital = capital.trim().to_string();
    
    // Прочитать название страны для поиска
    let mut lookup_country = String::new();
    io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
    let lookup_country = lookup_country.trim().to_string();
    
    // TODO: Напишите свой код ниже
    // Создать HashMap, вставить страну и столицу, затем найти страну
    
}
quiz iconПроверьте себя

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

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