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.
Sfida
FacileRiceverai 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
HashMapdastd::collections - Crea una mappa hash mutabile con tipo
HashMap<String, i32> - Leggi il primo input e convertilo in
i32per ottenere il numero di articoli - Usa un ciclo per leggere
ncoppie 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
matchper gestireOptionrestituito 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
ncoppie di righe:- Nome dell’articolo (ad esempio,
apples) - Quantità come intero (ad esempio,
50)
- Nome dell’articolo (ad esempio,
- 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]"
}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