Accedere ai valori
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 30 di 66.
Una volta memorizzati i dati nella tua mappa hash, avrai bisogno di un modo per recuperarli. Il metodo .get() ti permette di cercare un valore usando la sua chiave:
let value = my_map.get("some_key");Tuttavia, c’è un dettaglio importante da capire: .get() non restituisce direttamente il valore. Restituisce invece un tipo Option: un tipo integrato di Rust che rappresenta «qualcosa» oppure «niente». Questo perché la chiave che stai cercando potrebbe non esistere nella mappa hash.
Quando la chiave esiste, .get() restituisce Some(&value) - nota il simbolo &, che significa che ottieni un riferimento al valore, non il valore stesso. Quando la chiave non esiste, restituisce None:
match capitals.get("France") {
Some(capital) => println!("The capital is {}", capital),
None => println!("Country not found"),
}Potresti notare che il braccio del pattern usa Some(capital) senza un & esplicito. Questo perché in questo contesto Rust gestisce automaticamente il riferimento per te: capital contiene comunque un riferimento al valore, ma non devi scrivere & esplicitamente nel pattern. Il pattern matching di Rust è abbastanza intelligente da permetterti di usare direttamente capital, ad esempio quando lo stampi.
Questo design impedisce al tuo programma di bloccarsi quando provi ad accedere a una chiave che non esiste. Invece di causare un errore, Rust ti costringe a gestire entrambe le possibilità: trovare il valore oppure non trovarlo, rendendo il tuo codice più robusto e prevedibile.
Sfida
FacileRiceverai due input: il nome di un paese e il nome di una città capitale. Crea una mappa hash che memorizzi i nomi dei paesi come chiavi (tipo String) e le relative città capitali come valori (tipo String). Inserisci il paese e la sua capitale nella mappa hash. Poi riceverai un terzo input con il nome di un altro paese da cercare. Usa il metodo .get() per recuperare la capitale di questo paese e gestisci entrambi i casi: quando il paese è presente nella mappa e quando non lo è.
Nota: .get() restituisce un Option, che può essere Some(&value) (un riferimento al valore) quando la chiave esiste, oppure None quando non esiste. In un braccio di match, puoi scrivere Some(capital) e Rust gestirà automaticamente il riferimento, così potrai usare capital direttamente nell'istruzione di stampa.
Requisiti:
- Importa
HashMapdastd::collections - Crea una mappa hash mutabile con i tipi
HashMap<String, String> - Leggi il primo input come nome del paese
- Leggi il secondo input come nome della città capitale
- Inserisci il paese e la capitale nella mappa hash
- Leggi il terzo input come il paese da cercare
- Usa
.get()per recuperare la capitale del paese da cercare - Usa
matchper gestire l'Optionrestituito da.get() - Se il paese viene trovato, stampa:
The capital of [country] is [capital] - Se il paese non viene trovato, stampa:
[country] not found in the map
Input:
- Prima riga: nome del paese da inserire (ad esempio,
France) - Seconda riga: nome della città capitale (ad esempio,
Paris) - Terza riga: nome del paese da cercare (ad esempio,
FranceoGermany)
Output:
- Se il paese cercato esiste:
The capital of [country] is [capital] - Se il paese cercato non esiste:
[country] not found in the map
Provalo tu
use std::collections::HashMap;
use std::io;
fn main() {
// Leggi il nome del paese da inserire
let mut country = String::new();
io::stdin().read_line(&mut country).expect("Failed to read line");
let country = country.trim().to_string();
// Leggi il nome della capitale
let mut capital = String::new();
io::stdin().read_line(&mut capital).expect("Failed to read line");
let capital = capital.trim().to_string();
// Leggi il nome del paese da cercare
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: Scrivi il tuo codice qui sotto
// Crea una HashMap, inserisci il paese e la capitale, poi cerca il paese
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
L’espressione 'match'Corrispondenza di più valoriCorrispondenza di intervalliL’espressione 'if let'I cicli come espressioniRiepilogo - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi di una structStruct mutabiliLe struct come parametri di funzioneStruct tuplaRiepilogo - Crea una struct Book2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreScorrere un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker di punteggi di base5Coppie chiave-valore con le mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriIterare su una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: semplice inventario di articoli
Impostazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere insieme il tutto3Lista di cose da fare da riga di comando
Impostazione del progettoAggiungere un'attivitàVisualizzare tutte le attivitàRimuovere un'attivitàCodice finaleEsercitati da solo: Compilatore Rust online