0Pricing
Learn Rust Coding · Lekcja

HashMapy

Przechowywanie par klucz-wartość

HashMapy to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn Rust Coding, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Czym jest HashMap?

HashMap<K, V> przechowuje pary klucz-wartość. Wartości wyszukuje się za pomocą klucza, a nie pozycji.

Należy zaimportować ją ze standardowej biblioteki.

use std::collections::HashMap;

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

Importowanie HashMap

HashMap nie znajduje się w prelude, dlatego dodaj na początku pliku następujący wiersz:

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

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

Wstawianie par

Dodawaj wpisy za pomocą insert, podając klucz i wartość. Mapa musi być oznaczona jako mut.

use std::collections::HashMap;

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

Wyszukiwanie wartości

Użyj get, aby odczytać wartość na podstawie klucza. Zwraca ona Option — Some(value), jeśli klucz znaleziono, lub None w przeciwnym razie.

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"),
    }
}

Aktualizowanie wartości

Wywołanie insert z istniejącym kluczem zastępuje poprzednią wartość.

use std::collections::HashMap;

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

Wstawianie tylko pod nieobecność klucza

Interfejs entry z metodą or_insert wstawia wartość domyślną tylko wtedy, gdy brakuje klucza.

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"));
}

Zliczanie za pomocą entry

Klasyczny wzorzec: zliczaj wystąpienia, pobierając mutowalne odwołanie za pomocą or_insert i zwiększając jego wartość.

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);
}

Iterowanie po wpisach

Iteruj po HashMap, aby odwiedzić każdą parę klucz-wartość. Kolejność nie jest gwarantowana.

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);
    }
}

Usuwanie wpisów

Usuń parę za pomocą remove. Metoda zwraca usuniętą wartość jako 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());
}

Sprawdzanie obecności klucza

Użyj contains_key, aby sprawdzić, czy klucz istnieje, bez pobierania jego wartości.

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"));
}

Wartość domyślna z unwrap_or

Podczas odczytu można podać wartość zastępczą za pomocą unwrap_or zamiast dopasowywać wariant Option.

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);
}

Szybkie sprawdzenie

Przypomnij sobie, jak działają wyszukiwania w HashMap.

Podsumowanie

HashMap w Rust:

  • HashMap<K, V> przechowuje pary klucz-wartość; należy ją zaimportować z std::collections.
  • insert dodaje lub nadpisuje wpis, a get zwraca Option.
  • entry().or_insert() wstawia wpis tylko wtedy, gdy go brakuje.
  • Iteruj za pomocą 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"));
}

Często zadawane pytania

Czy lekcja „HashMapy” jest bezpłatna?

Tak — pełny tekst „HashMapy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn Rust Coding, przejdź na CoddyKit PRO. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Co nauczysz się w „HashMapy”?

Przechowywanie par klucz-wartość Ćwiczysz Learn Rust Coding z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn Rust Coding?

Nie wymagamy żadnego doświadczenia. Learn Rust Coding w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „HashMapy”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn Rust Coding?

Tak. Każda lekcja Learn Rust Coding zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wektory
  2. Napisy i &str
  3. HashMapy
  4. Iterowanie po kolekcjach
← Powrót do Learn Rust Coding