0Pricing
Learn Rust Coding · Урок

Создание HashMap

Вставляйте значения и находите их по ключу.

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

Что такое HashMap

HashMap хранит данные в виде пар «ключ—значение». Поиск выполняется по ключу, а не по индексу.

Представьте телефонную книгу: имя (ключ) сопоставляется с номером (значением). HashMaps идеально подходят, когда нужен быстрый поиск по осмысленному ключу.

Импорт HashMap

В отличие от Vec и String, HashMap не входит в прелюдию. Его нужно добавить в область видимости.

Добавьте строку use в начале файла. После этого имя будет доступно во всём модуле.

use std::collections::HashMap;

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

Вставка пар

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

Чтобы разрешить вставку, карта должна быть объявлена как mut.

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("Alice", 50);
    scores.insert("Bob", 30);
    println!("{} players", scores.len());
}

Вывод типа

Обычно тип указывать не нужно. Rust выводит HashMap<&str, i32> по первым вызовам insert.

Здесь ключами являются строковые срезы, а значениями — целые числа; всё это определяется по использованию.

use std::collections::HashMap;

fn main() {
    let mut ages = HashMap::new();
    ages.insert("Sam", 28);
    ages.insert("Mia", 34);
    println!("Sam is {}", ages["Sam"]);
}

Получение значений

Метод get возвращает Option. Если ключ существует, вы получаете Some(&value), а если нет — None.

Это заставляет безопасно обрабатывать случай отсутствующего ключа.

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("Alice", 50);
    match scores.get("Alice") {
        Some(v) => println!("score: {}", v),
        None => println!("no score"),
    }
}

Индексация и get

Можно использовать индексацию map[key], но при отсутствии ключа она вызывает панику.

Предпочитайте get, если ключ может отсутствовать. Используйте индексацию только тогда, когда уверены, что ключ существует.

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("x", 1);
    // m["y"] would panic!
    let v = m.get("y").copied().unwrap_or(0);
    println!("y = {}", v);
}

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

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

Предыдущее значение возвращается в Option, поэтому при необходимости его можно проверить.

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("k", 1);
    let old = m.insert("k", 9);
    println!("old = {:?}, now = {}", old, m["k"]);
}

Проверка ключей

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

Метод возвращает обычное значение bool, что удобно использовать в условиях if.

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("on", true);
    if m.contains_key("on") {
        println!("key exists");
    }
}

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

Метод remove удаляет ключ и возвращает его значение в виде Option.

Если ключ отсутствовал, вы получаете None, поэтому удаление всегда безопасно.

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("a", 1);
    let removed = m.remove("a");
    println!("removed {:?}, len {}", removed, m.len());
}

Перебор карты

Цикл for по HashMap выдаёт кортежи (key, value) по ссылке.

Порядок не определён и может меняться между запусками, поскольку хеширование перемешивает расположение элементов.

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("a", 1);
    m.insert("b", 2);
    for (k, v) in &m {
        println!("{} -> {}", k, v);
    }
}

Владение ключами

При вставке принадлежащих вызывающему коду значений, например String, карта получает право владения ими.

После вставки переменную нельзя использовать снова, если предварительно не создать её копию.

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    let name = String::from("Alice");
    m.insert(name, 50);
    // name is moved here; m owns it now
    println!("{}", m["Alice"]);
}

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

Вам нужно значение, но ключ может отсутствовать.

Повторение

Вы научились создавать HashMap, вставлять пары и получать значения с помощью get или индексации.

Вы также познакомились с contains_key, remove, итерацией и тем, как карта получает право владения вставленными ключами.

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

Урок «Создание HashMap» бесплатный?

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

Чему я научусь в уроке «Создание HashMap»?

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

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

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

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

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

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

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

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

  1. Создание HashMap
  2. API Entry и значения по умолчанию
  3. Работа с HashSet
  4. Подсчёт и группировка
← Назад к Learn Rust Coding