Menu
CoddyTech

Rimuovere una coppia

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

A volte devi rimuovere completamente i 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"), provando a cercare "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 di ritorno 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 articoli presenti in un inventario. Poi riceverai n coppie di input: il nome di un articolo seguito dalla sua quantità (come intero). Dopodiché, riceverai un altro input con il nome di un articolo da rimuovere dall’inventario. Crea una mappa hash per memorizzare l’inventario, inserisci tutti gli articoli, rimuovi l’articolo specificato e stampa il risultato della rimozione insieme all’inventario rimanente.

Requisiti:

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

Input:

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

Output:

  • Prima riga: Removed [quantity] [item_name] oppure [item_name] not found
  • Righe successive: una riga per ogni articolo rimanente nel formato: [item_name]: [quantity]
  • L’ordine degli articoli rimanenti può variare tra un’esecuzione di test 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 hash map 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 hash map
    }
    
    // Leggi il nome dell'articolo da rimuovere
    let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
    
    // TODO: Rimuovi l'articolo dalla hash map 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