Menu
Coddy logo textTech

Accedere ai valori

Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 30 di 66.

Una volta che hai memorizzato dei dati nella tua mappa hash, ti servirà 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 comprendere: .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 ramo del pattern usa Some(capital) senza un & esplicito. Questo perché in questo contesto Rust gestisce automaticamente il riferimento per te: capital mantiene 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, per esempio quando lo stampi.

Questo design impedisce al tuo programma di arrestarsi in modo anomalo quando provi ad accedere a una chiave che non esiste. Invece di causare un errore, Rust ti obbliga 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 rispettive 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 esiste nella mappa e quando non esiste.

Nota: .get() restituisce un Option, ovvero Some(&value) (un riferimento al valore) quando la chiave esiste, oppure None quando non esiste. In un ramo 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 cercato
  • 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 es., France)
  • Seconda riga: nome della città capitale (ad es., Paris)
  • Terza riga: nome del paese da cercare (ad es., 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