Menu
Coddy logo textTech

Wstawianie par klucz–wartość

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

Teraz, gdy masz pustą mapę haszującą, czas dodać do niej dane. Możesz wstawiać pary klucz-wartość do mapy haszującej za pomocą metody .insert():

let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");

Metoda .insert() przyjmuje dwa parametry: klucz i wartość. W tym przykładzie przechowujemy nazwy krajów jako klucze, a ich stolice jako wartości.

Warto pamiętać o ważnym zachowaniu: jeśli wstawisz klucz, który już istnieje w mapie haszującej, nowa wartość zastąpi starą:

capitals.insert("France", "Lyon");  // To nadpisuje "Paris"

Po tej operacji wyszukanie „France” zwróci „Lyon” zamiast „Paris”. To zachowanie polegające na nadpisywaniu sprawia, że .insert() przydaje się zarówno do dodawania nowych wpisów, jak i aktualizowania istniejących w mapie haszującej.

challenge icon

Wyzwanie

Łatwy

Otrzymasz trzy dane wejściowe: nazwę produktu, jego cenę (jako liczbę dziesiętną) oraz nazwę innego produktu. Utwórz mutowalną mapę haszującą do przechowywania nazw produktów jako kluczy (typ String) i ich cen jako wartości (typ f64). Wstaw pierwszy produkt wraz z jego ceną do mapy haszującej. Następnie wstaw drugi produkt z ceną 0.0. Na koniec zaktualizuj cenę drugiego produktu na 15.99, wstawiając go ponownie z nową ceną. Wypisz wszystkie informacje w dokładnym formacie pokazanym poniżej.

Uwaga dotycząca .clone(): Podczas wstawiania zmiennej typu String jako klucza do HashMap zasady własności w Rust oznaczają, że zmienna zostałaby przeniesiona do mapy i nie byłaby już później dostępna. Aby móc nadal używać tej zmiennej (np. do wypisania lub ponownego wstawienia), wywołaj na niej .clone(), przekazując ją do insert(). Na przykład: map.insert(name.clone(), price).

Wymagania:

  • Zaimportuj HashMap z std::collections
  • Utwórz mutowalną mapę haszującą o typie HashMap<String, f64>
  • Odczytaj pierwsze dane wejściowe jako nazwę pierwszego produktu
  • Odczytaj drugie dane wejściowe i przekonwertuj je na f64, aby uzyskać cenę pierwszego produktu
  • Wstaw pierwszy produkt i jego cenę do mapy haszującej, używając .clone() na nazwie produktu
  • Odczytaj trzecie dane wejściowe jako nazwę drugiego produktu
  • Wstaw drugi produkt z ceną 0.0, używając .clone() na nazwie produktu
  • Wstaw ponownie drugi produkt z ceną 15.99, używając .clone() (spowoduje to nadpisanie poprzedniej wartości)
  • Wypisz informacje o obu produktach w dokładnym formacie pokazanym poniżej

Dane wejściowe:

  • Pierwsza linia: nazwa pierwszego produktu (np. Laptop)
  • Druga linia: cena pierwszego produktu jako liczba dziesiętna (np. 999.99)
  • Trzecia linia: nazwa drugiego produktu (np. Mouse)

Dane wyjściowe:

  • Pierwsza linia: Inserted [first_product] at $[price]
  • Druga linia: Inserted [second_product] at $0.00
  • Trzecia linia: Updated [second_product] to $15.99

Spróbuj swoich sił

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

fn main() {
    // Wczytaj dane wejściowe
    let mut product1 = String::new();
    io::stdin().read_line(&mut product1).expect("Failed to read line");
    let product1 = product1.trim().to_string();
    
    let mut price1_input = String::new();
    io::stdin().read_line(&mut price1_input).expect("Failed to read line");
    let price1: f64 = price1_input.trim().parse().expect("Failed to parse price");
    
    let mut product2 = String::new();
    io::stdin().read_line(&mut product2).expect("Failed to read line");
    let product2 = product2.trim().to_string();
    
    // TODO: Napisz swój kod poniżej
    // Utwórz modyfikowalną HashMap, dodaj produkty i wypisz wymagany wynik
    
}
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