Menu
Coddy logo textTech

Dostęp do wartości

Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 30 z 66.

Gdy zapiszesz dane w swojej mapie haszującej, będziesz potrzebować sposobu, aby je pobrać. Metoda .get() pozwala wyszukać wartość za pomocą jej klucza:

let value = my_map.get("some_key");

Jest jednak ważny szczegół, który trzeba zrozumieć: .get() nie zwraca bezpośrednio wartości. Zamiast tego zwraca typ Option: wbudowany typ Rust, który reprezentuje „coś” albo „nic”. Dzieje się tak, ponieważ klucz, którego szukasz, może nie istnieć w mapie haszującej.

Gdy klucz istnieje, .get() zwraca Some(&value) — zwróć uwagę na symbol &, który oznacza, że otrzymujesz referencję do wartości, a nie samą wartość. Gdy klucz nie istnieje, zwraca None:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

Możesz zauważyć, że ramię dopasowania używa Some(capital) bez jawnego &. Dzieje się tak, ponieważ Rust automatycznie obsługuje referencję w tym kontekście: capital nadal przechowuje referencję do wartości, ale nie musisz jawnie zapisywać & we wzorcu. Dopasowywanie wzorców w Rust jest na tyle inteligentne, że pozwala używać bezpośrednio capital, na przykład podczas jego wypisywania.

Ten projekt zapobiega awarii programu, gdy próbujesz uzyskać dostęp do klucza, który nie istnieje. Zamiast powodować błąd, Rust zmusza Cię do obsługi obu możliwości — znalezienia wartości lub jej nieznalezienia — dzięki czemu Twój kod jest bardziej niezawodny i przewidywalny.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa dane wejściowe: nazwę kraju i nazwę jego stolicy. Utwórz mapę haszującą, która przechowuje nazwy krajów jako klucze (typ String), a nazwy ich stolic jako wartości (typ String). Wstaw kraj i jego stolicę do mapy haszującej. Następnie otrzymasz trzecie dane wejściowe z nazwą innego kraju do wyszukania. Użyj metody .get(), aby pobrać stolicę tego kraju, i obsłuż oba przypadki: gdy kraj istnieje w mapie oraz gdy go w niej nie ma.

Uwaga: .get() zwraca wartość typu Option: albo Some(&value) (referencję do wartości), gdy klucz istnieje, albo None, gdy go nie ma. W ramieniu match możesz napisać Some(capital), a Rust automatycznie obsłuży referencję, więc możesz użyć capital bezpośrednio w instrukcji wypisującej.

Wymagania:

  • Zaimportuj HashMap z std::collections
  • Utwórz mutowalną mapę haszującą o typie HashMap<String, String>
  • Odczytaj pierwsze dane wejściowe jako nazwę kraju
  • Odczytaj drugie dane wejściowe jako nazwę stolicy
  • Wstaw kraj i stolicę do mapy haszującej
  • Odczytaj trzecie dane wejściowe jako kraj do wyszukania
  • Użyj .get(), aby pobrać stolicę wyszukiwanego kraju
  • Użyj match, aby obsłużyć wartość typu Option zwracaną przez .get()
  • Jeśli kraj zostanie znaleziony, wypisz: The capital of [country] is [capital]
  • Jeśli kraj nie zostanie znaleziony, wypisz: [country] not found in the map

Dane wejściowe:

  • Pierwszy wiersz: nazwa kraju do wstawienia (np. France)
  • Drugi wiersz: nazwa stolicy (np. Paris)
  • Trzeci wiersz: nazwa kraju do wyszukania (np. France lub Germany)

Dane wyjściowe:

  • Jeśli wyszukiwany kraj istnieje: The capital of [country] is [capital]
  • Jeśli wyszukiwany kraj nie istnieje: [country] not found in the map

Spróbuj swoich sił

use std::collections::HashMap;
use std::io;

fn main() {
    // Wczytaj nazwę kraju do dodania
    let mut country = String::new();
    io::stdin().read_line(&mut country).expect("Failed to read line");
    let country = country.trim().to_string();
    
    // Wczytaj nazwę stolicy
    let mut capital = String::new();
    io::stdin().read_line(&mut capital).expect("Failed to read line");
    let capital = capital.trim().to_string();
    
    // Wczytaj nazwę kraju do wyszukania
    let mut lookup_country = String::new();
    io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
    let lookup_country = lookup_country.trim().to_string();
    
    // TODO: Napisz swój kod poniżej
    // Utwórz HashMap, dodaj kraj i jego stolicę, a następnie wyszukaj kraj
    
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator Rust online