Budowanie HashMap
Wstawi Pan/Pani elementy i wyszuka je po kluczu.
Budowanie HashMap to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 1 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 przechowuje dane jako pary klucz-wartość. Wyszukiwanie odbywa się za pomocą klucza, a nie indeksu.
Można myśleć o niej jak o książce telefonicznej: nazwisko (klucz) wskazuje numer (wartość). HashMap świetnie nadaje się do szybkiego wyszukiwania za pomocą znaczącego klucza.
Importowanie HashMap
W przeciwieństwie do Vec i String, HashMap nie znajduje się w prelude. Należy wprowadzić ją do zakresu.
Dodaj wiersz use na początku pliku. Dzięki temu nazwa będzie dostępna w całym module.
use std::collections::HashMap;
fn main() {
let scores: HashMap<String, i32> = HashMap::new();
println!("empty map len: {}", scores.len());
}Wstawianie par
Użyj insert, aby dodać klucz i jego wartość. Jeśli klucz już istnieje, poprzednia wartość zostanie zastąpiona.
Mapa musi być zadeklarowana jako mut, aby można było wstawiać elementy.
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert("Alice", 50);
scores.insert("Bob", 30);
println!("{} players", scores.len());
}Wnioskowanie typu
Zwykle nie trzeba jawnie zapisywać typu. Rust wywnioskuje HashMap<&str, i32> na podstawie pierwszych wywołań insert.
W tym przykładzie kluczami są wycinki napisów, a wartościami liczby całkowite — wszystko wynika z użycia.
use std::collections::HashMap;
fn main() {
let mut ages = HashMap::new();
ages.insert("Sam", 28);
ages.insert("Mia", 34);
println!("Sam is {}", ages["Sam"]);
}Pobieranie wartości
Metoda get zwraca wartość typu Option. Jeśli klucz istnieje, otrzymują Państwo Some(&value), a jeśli nie — None.
Zmusza to do bezpiecznego obsłużenia przypadku braku wartości.
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"),
}
}Indeksowanie a get
Można użyć indeksowania za pomocą map[key], ale powoduje ono panikę, jeśli brakuje klucza.
Preferuj get, gdy klucz może nie istnieć. Indeksowania używaj tylko wtedy, gdy masz pewność, że klucz jest obecny.
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);
}Aktualizowanie wartości
Wywołanie insert z istniejącym kluczem zastępuje poprzednią wartość.
Poprzednia wartość jest zwracana w opakowaniu Option, więc w razie potrzeby można ją sprawdzić.
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"]);
}Sprawdzanie kluczy
Użyj contains_key, aby sprawdzić, czy klucz istnieje, bez pobierania jego wartości.
Metoda zwraca zwykłą wartość typu bool, co jest przydatne w warunkach if.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("on", true);
if m.contains_key("on") {
println!("key exists");
}
}Usuwanie wpisów
Metoda remove usuwa klucz i zwraca jego wartość jako Option.
Jeśli klucz nie był obecny, otrzymują Państwo None, więc usuwanie jest zawsze bezpieczne.
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());
}Iterowanie po mapie
Pętla for wykonana na HashMap zwraca krotki (key, value) przez referencję.
Należy pamiętać, że kolejność nie jest określona i może zmieniać się między uruchomieniami, ponieważ funkcja haszująca miesza rozmieszczenie elementów.
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);
}
}Własność kluczy
Po wstawieniu wartości posiadających własność, takich jak String, mapa przejmuje ich własność.
Po wstawieniu nie można ponownie użyć tej zmiennej, chyba że wcześniej utworzono jej kopię za pomocą clone.
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"]);
}Szybkie sprawdzenie
Potrzebują Państwo wartości, ale klucz może nie istnieć.
Podsumowanie
Nauczyli się Państwo tworzyć HashMap, wstawiać pary oraz wyszukiwać wartości za pomocą get lub indeksowania.
Poznali też Państwo contains_key, remove, iterowanie oraz sposób, w jaki mapa przejmuje własność wstawianych kluczy.
Ucz się Rust dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 39
- Lekcje
- 144
Często zadawane pytania
Czy lekcja „Budowanie HashMap” jest bezpłatna?
Tak — pełny tekst „Budowanie HashMap” 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 „Budowanie HashMap”?
Wstawi Pan/Pani elementy i wyszuka je po kluczu. Ć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 1 z 4.
Ile czasu zajmuje lekcja „Budowanie HashMap”?
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
- Budowanie HashMap
- Entry API i wartości domyślne
- Praca z HashSet
- Zliczanie i grupowanie