Menu
Coddy logo textTech

Rimuovere una coppia

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

A volte devi rimuovere completamente dei dati dalla tua mappa hash. Rust fornisce il metodo .remove() per eliminare una coppia chiave-valore specificando la chiave:

let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);

// Rimuovi completamente la voce "apples"
inventory.remove("apples");

Il metodo .remove() prende la chiave come parametro e rimuove sia la chiave sia il valore associato dalla mappa hash. Dopo aver chiamato .remove("apples"), cercando "apples" si otterrebbe None.

Come molte operazioni sulle mappe hash, .remove() restituisce un Option. Restituisce Some(value) contenente il valore rimosso se la chiave esisteva, oppure None se la chiave non è stata trovata:

let removed_value = inventory.remove("bananas");
match removed_value {
    Some(count) => println!("Removed {} bananas", count),
    None => println!("No bananas found to remove"),
}

Questo valore restituito ti permette di sapere se la rimozione è riuscita e ti dà accesso al valore che è stato rimosso, il che può essere utile per operazioni di registrazione o pulizia.

challenge icon

Sfida

Facile

Riceverai un intero n che indica il numero di elementi presenti in un inventario. Poi riceverai n coppie di input: il nome di un elemento seguito dalla sua quantità (come intero). Dopodiché, riceverai un altro input con il nome di un elemento da rimuovere dall'inventario. Crea una mappa hash per memorizzare l'inventario, inserisci tutti gli elementi, rimuovi quello specificato e stampa il risultato della rimozione insieme all'inventario rimanente.

Requisiti:

  • Importa HashMap da std::collections
  • Crea una mappa hash mutabile con i tipi HashMap<String, i32>
  • Leggi il primo input e convertilo in i32 per ottenere il numero di elementi
  • Usa un ciclo per leggere n coppie di input (nome dell'elemento, poi quantità)
  • Inserisci ogni elemento e la sua quantità nella mappa hash
  • Leggi un altro input come nome dell'elemento da rimuovere
  • Usa .remove() per rimuovere l'elemento dalla mappa hash
  • Usa match per gestire il valore Option restituito da .remove()
  • Se l'elemento è stato trovato e rimosso, stampa: Removed [quantity] [item_name]
  • Se l'elemento non è stato trovato, stampa: [item_name] not found
  • Dopo aver gestito la rimozione, scorri la mappa hash rimanente e stampa ogni elemento nel formato: [item_name]: [quantity]

Input:

  • Prima riga: un intero n (ad esempio, 3)
  • Le successive n coppie di righe:
    • Nome dell'elemento (ad esempio, apples)
    • Quantità come intero (ad esempio, 50)
  • Ultima riga: nome dell'elemento da rimuovere (ad esempio, bananas)

Output:

  • Prima riga: Removed [quantity] [item_name] oppure [item_name] not found
  • Righe successive: una riga per ogni elemento rimanente nel formato: [item_name]: [quantity]
  • L'ordine degli elementi rimanenti può variare tra un'esecuzione e l'altra

Provalo tu

use std::collections::HashMap;
use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // Leggi il numero di articoli
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Crea una mappa hash mutabile per memorizzare l'inventario
    let mut inventory: HashMap<String, i32> = HashMap::new();
    
    // Leggi n coppie di valori in input (nome dell'articolo e quantità)
    for _ in 0..n {
        let item_name = lines.next().unwrap().unwrap().trim().to_string();
        let quantity: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
        
        // TODO: Inserisci l'articolo e la quantità nella mappa hash
    }
    
    // Leggi il nome dell'articolo da rimuovere
    let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
    
    // TODO: Rimuovi l'articolo dalla mappa hash e gestisci il risultato usando match
    // Stampa il risultato della rimozione ("Removed [quantity] [item_name]" oppure "[item_name] not found")
    
    // TODO: Scorri l'inventario rimanente e stampa ogni articolo nel formato "[item_name]: [quantity]"
}
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