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ć zstd::collections.insertdodaje lub nadpisuje wpis, agetzwraca 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.