Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Riceverai 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 HashMap da std::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 match per gestire l'Option restituito 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, France o Germany)

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
    
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Rust online