0Pricing
Learn Rust Coding · Урок

HashMaps

Хранилище пар «ключ — значение»

«HashMaps» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Что такое HashMap

HashMap<K, V> хранит пары ключ-значение. Значения ищутся по ключу, а не по позиции.

Его необходимо импортировать из стандартной библиотеки.

use std::collections::HashMap;

fn main() {
    let map: HashMap<String, i32> = HashMap::new();
    println!("{} entries", map.len());
}

Импорт HashMap

HashMap не входит в прелюдию, поэтому добавьте эту строку в начало файла:

  • use std::collections::HashMap;
use std::collections::HashMap;

fn main() {
    let scores: HashMap<&str, i32> = HashMap::new();
    println!("empty: {}", scores.is_empty());
}

Добавление пар

Добавляйте записи с помощью insert, указывая ключ и значение. Карта должна иметь тип mut.

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("Alice", 90);
    scores.insert("Bob", 85);
    println!("{:?}", scores);
}

Поиск значений

Используйте get, чтобы прочитать значение по ключу. Он возвращает Option — Some(value), если значение найдено, и None в противном случае.

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("Alice", 90);
    match scores.get("Alice") {
        Some(s) => println!("score {}", s),
        None => println!("not found"),
    }
}

Обновление значения

Вызов insert с уже существующим ключом заменяет старое значение.

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("count", 1);
    map.insert("count", 5); // overwrites
    println!("{:?}", map.get("count"));
}

Добавление только отсутствующих ключей

API entry вместе с or_insert добавляет значение по умолчанию, только если ключ отсутствует.

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.entry("x").or_insert(10);
    map.entry("x").or_insert(99); // ignored, key exists
    println!("{:?}", map.get("x"));
}

Подсчёт с помощью entry

Классический шаблон: получить изменяемую ссылку с помощью or_insert и увеличить значение.

use std::collections::HashMap;

fn main() {
    let text = "a b a c b a";
    let mut counts = HashMap::new();
    for word in text.split_whitespace() {
        let c = counts.entry(word).or_insert(0);
        *c += 1;
    }
    println!("{:?}", counts);
}

Перебор записей

Перебирайте HashMap, чтобы посетить каждую пару ключ-значение. Порядок не гарантируется.

use std::collections::HashMap;

fn main() {
    let mut ages = HashMap::new();
    ages.insert("Tom", 30);
    ages.insert("Sue", 25);
    for (name, age) in &ages {
        println!("{} is {}", name, age);
    }
}

Удаление записей

Удаляйте пару с помощью remove. Метод возвращает удалённое значение как Option.

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("key", 42);
    let removed = map.remove("key");
    println!("removed {:?}, len {}", removed, map.len());
}

Проверка наличия ключа

Используйте contains_key, чтобы проверить наличие ключа, не извлекая его значение.

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("on", true);
    println!("{}", map.contains_key("on"));
    println!("{}", map.contains_key("off"));
}

Значение по умолчанию с unwrap_or

При чтении вместо сопоставления с Option можно указать запасное значение с помощью unwrap_or.

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("a", 1);
    let value = map.get("missing").unwrap_or(&0);
    println!("{}", value);
}

Быстрая проверка

Вспомните, как работает поиск в HashMap.

Повторение

HashMaps в Rust:

  • HashMap<K, V> хранит пары ключ-значение; его нужно импортировать из std::collections.
  • insert добавляет или заменяет значение, а get возвращает Option.
  • entry().or_insert() добавляет значение, только если ключ отсутствует.
  • Перебор выполняется с помощью for (k, v) in &map.
use std::collections::HashMap;

fn main() {
    let mut inventory = HashMap::new();
    inventory.insert("apples", 3);
    *inventory.entry("apples").or_insert(0) += 2;
    println!("{:?}", inventory.get("apples"));
}

Часто задаваемые вопросы

Урок «HashMaps» бесплатный?

Да — полный текст урока «HashMaps» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «HashMaps»?

Хранилище пар «ключ — значение» Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «HashMaps»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Векторы
  2. Строки и &str
  3. HashMaps
  4. Итерация по коллекциям
← Назад к Learn Rust Coding