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.
Sfida
FacileRiceverai 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
HashMapdastd::collections - Crea una mappa hash mutabile con i tipi
HashMap<String, i32> - Leggi il primo input e convertilo in
i32per ottenere il numero di elementi - Usa un ciclo per leggere
ncoppie 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
matchper gestire il valoreOptionrestituito 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
ncoppie di righe:- Nome dell'elemento (ad esempio,
apples) - Quantità come intero (ad esempio,
50)
- Nome dell'elemento (ad esempio,
- 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]"
}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'Cicli come espressioniRipasso - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi delle structStruct mutabiliStruct come parametri di funzioneStruct tuplaRiepilogo - Creare una struct Book2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreIterare su un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker dei punteggi di base5Coppie chiave-valore con mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriScorrere una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: inventario semplice degli articoli
Configurazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere tutto insieme3Lista di attività da riga di comando
Configurazione del progettoAggiungere un'attivitàVisualizzare tutte le attivitàRimuovere un'attivitàCodice finaleEsercitati da solo: Compilatore Rust online