Iterowanie po mapie haszującej
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 31 z 66.
Czasami musisz przejrzeć każdą parę klucz-wartość w swojej mapie haszującej, zamiast wyszukiwać konkretne klucze. Rust udostępnia prosty sposób iterowania po wszystkich danych za pomocą pętli for:
for (key, value) in &my_map {
println!("{}: {}", key, value);
}Zwróć uwagę na & przed my_map — tworzy on referencję do mapy haszującej, dzięki czemu możesz iterować bez przejmowania własności. Pętla przekazuje każdą parę klucz-wartość jako krotkę, którą możesz bezpośrednio rozpakować w deklaracji pętli.
Oto praktyczny przykład z cennikiem:
let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);
for (item, price) in &prices {
println!("{} costs ${:.2}", item, price);
}Jest jeden ważny szczegół, o którym warto pamiętać: mapy haszujące nie gwarantują żadnej konkretnej kolejności iteracji. Pary mogą pojawiać się w innej kolejności za każdym razem, gdy uruchomisz program. Dzieje się tak, ponieważ mapy haszujące stawiają szybkie wyszukiwanie ponad zachowanie kolejności wstawiania, więc podczas iteracji nie polegaj na tym, że elementy pojawią się w określonej kolejności.
Wyzwanie
ŁatwyOtrzymasz liczbę całkowitą n, która określa liczbę par: uczeń–wynik, które należy przetworzyć. Następnie otrzymasz n par danych wejściowych: imię ucznia, a po nim jego wynik testu (jako liczbę całkowitą). Utwórz mapę hashującą, aby przechowywać imiona uczniów jako klucze, a ich wyniki jako wartości. Po wstawieniu wszystkich par przeiteruj po mapie hashującej i wypisz imię każdego ucznia oraz jego wynik.
Wymagania:
- Zaimportuj
HashMapzstd::collections - Utwórz mutowalną mapę hashującą o typie
HashMap<String, i32> - Odczytaj pierwszą wartość wejściową i przekonwertuj ją na
i32, aby uzyskać liczbę par - Użyj pętli, aby odczytać
npar danych wejściowych (imię ucznia, a następnie wynik) - Wstaw imię i wynik każdego ucznia do mapy hashującej
- Użyj pętli
for, aby iterować po mapie hashującej za pomocą&map - Wypisz informacje o każdym uczniu w formacie:
[name]: [score] - Wypisz pary w dowolnej kolejności (mapy hashujące nie gwarantują kolejności)
Dane wejściowe:
- Pierwszy wiersz: liczba całkowita
n(np.3) - Następnie
npar wierszy:- Imię ucznia (np.
Alice) - Wynik testu jako liczba całkowita (np.
95)
- Imię ucznia (np.
Dane wyjściowe:
- Jeden wiersz dla każdego ucznia w formacie:
[name]: [score] - Kolejność wierszy wyjściowych może się różnić między uruchomieniami testów
Spróbuj swoich sił
use std::collections::HashMap;
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Wczytaj liczbę par uczeń–wynik
let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
// Utwórz modyfikowalną mapę haszującą do przechowywania imion uczniów i ich wyników
let mut students: HashMap<String, i32> = HashMap::new();
// TODO: Napisz swój kod poniżej
// Wczytaj n par danych wejściowych (imię ucznia i wynik) i dodaj je do mapy haszującej
// TODO: Przejdź po mapie haszującej i wypisz imię oraz wynik każdego ucznia
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane sterowanie przepływem
Wyrażenie „match”Dopasowywanie wielu wartościDopasowywanie zakresówWyrażenie „if let”Pętle jako wyrażeniaPodsumowanie — prosty parser poleceń4Grupowanie danych za pomocą struktur
Czym jest struktura?Przegląd strukturDostęp do pól strukturyModyfikowalne strukturyStruktury jako parametry funkcjiStruktury krotkowePodsumowanie — utwórz strukturę Book2Wprowadzenie do wektorów
Czym jest wektor?Tworzenie wektoraDodawanie elementów za pomocą pushDostęp do elementów wektoraIterowanie po wektorzeIterowanie z możliwością modyfikacjiUsuwanie elementówPodsumowanie — prosty licznik punktów5Pary klucz–wartość z mapami hashującymi
Czym jest mapa haszująca?Tworzenie mapy haszującejWstawianie par klucz–wartośćDostęp do wartościIterowanie po mapie haszującejAktualizowanie wartościUsuwanie paryPodsumowanie – licznik słów8Projekt: Prosty system inwentaryzacji
Konfiguracja projektuDodawanie produktuSprawdzanie stanu magazynowegoSprzedaż produktuŁączenie wszystkiego w całość3Lista zadań w wierszu poleceń
Konfiguracja projektuDodawanie zadaniaWyświetlanie wszystkich zadańUsuwanie zadaniaKońcowy kodPoćwicz samodzielnie: Kompilator Rust online