Supprimer une paire
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 33 sur 66.
Parfois, vous devez supprimer entièrement des données de votre hash map. Rust fournit la méthode .remove() pour supprimer une paire clé-valeur en spécifiant la clé :
let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);
// Supprimer complètement l'entrée "apples"
inventory.remove("apples");La méthode .remove() prend la clé comme paramètre et supprime à la fois la clé et sa valeur associée de la table de hachage. Après avoir appelé .remove("apples"), tenter de rechercher "apples" retournerait None.
Comme beaucoup d'opérations sur les tables de hachage, .remove() renvoie un Option. Elle renvoie Some(value) contenant la valeur supprimée si la clé existait, ou None si la clé n'a pas été trouvée :
let removed_value = inventory.remove("bananas");
match removed_value {
Some(count) => println!("Removed {} bananas", count),
None => println!("No bananas found to remove"),
}Cette valeur de retour vous permet de savoir si la suppression a réussi et vous donne accès à la valeur qui a été supprimée, ce qui peut être utile pour la journalisation ou les opérations de nettoyage.
Défi
FacileVous recevrez un entier n indiquant le nombre d'articles dans un inventaire. Ensuite, vous recevrez n paires d'entrées : un nom d'article suivi de sa quantité (sous forme d'entier). Après cela, vous recevrez une entrée supplémentaire avec un nom d'article à retirer de l'inventaire. Créez une table de hachage (hash map) pour stocker l'inventaire, insérez tous les articles, retirez l'article spécifié et affichez le résultat de la suppression ainsi que l'inventaire restant.
Exigences :
- Importez
HashMapdepuisstd::collections - Créez une table de hachage mutable avec les types
HashMap<String, i32> - Lisez la première entrée et convertissez-la en
i32pour obtenir le nombre d'articles - Utilisez une boucle pour lire
npaires d'entrées (nom de l'article, puis quantité) - Insérez chaque article et sa quantité dans la table de hachage
- Lisez une entrée supplémentaire comme nom de l'article à retirer
- Utilisez
.remove()pour retirer l'article de la table de hachage - Utilisez
matchpour gérer l'Optionrenvoyée par.remove() - Si l'article a été trouvé et retiré, affichez :
Removed [quantity] [item_name] - Si l'article n'a pas été trouvé, affichez :
[item_name] not found - Après avoir géré la suppression, itérez sur la table de hachage restante et affichez chaque article au format :
[item_name]: [quantity]
Entrée :
- Première ligne : Un entier
n(par exemple,3) npaires de lignes suivantes :- Nom de l'article (par exemple,
apples) - Quantité sous forme d'entier (par exemple,
50)
- Nom de l'article (par exemple,
- Dernière ligne : Nom de l'article à retirer (par exemple,
bananas)
Sortie :
- Première ligne : Soit
Removed [quantity] [item_name]ou[item_name] not found - Lignes suivantes : Une ligne pour chaque article restant au format :
[item_name]: [quantity] - L'ordre des articles restants peut varier d'un test à l'autre
Aide-mémoire
Pour supprimer une paire clé-valeur d'une table de hachage (hash map), utilisez la méthode .remove() avec la clé comme paramètre :
let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);
inventory.remove("apples");La méthode .remove() renvoie une Option : Some(value) si la clé existait, ou None si elle n'a pas été trouvée :
let removed_value = inventory.remove("bananas");
match removed_value {
Some(count) => println!("Removed {} bananas", count),
None => println!("No bananas found to remove"),
}Essayez vous-même
use std::collections::HashMap;
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Lire le nombre d'articles
let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
// Créer une table de hachage mutable pour stocker l'inventaire
let mut inventory: HashMap<String, i32> = HashMap::new();
// Lire n paires d'entrées (nom de l'article et 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: Insérer l'article et la quantité dans la table de hachage
}
// Lire le nom de l'article à supprimer
let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
// TODO: Supprimer l'article de la table de hachage et gérer le résultat en utilisant match
// Afficher le résultat de la suppression (soit "Removed [quantity] [item_name]" ou "[item_name] not found")
// TODO: Itérer sur l'inventaire restant et afficher chaque article au format "[item_name]: [quantity]"
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Structures de contrôle avancées
L'expression 'match'Filtrage de plusieurs valeursFiltrage d'intervallesL'expression 'if let'Les boucles en tant qu'expressionsRécapitulatif - Analyseur de commandes simple4Regrouper des données avec les structures
Qu'est-ce qu'une structure ?Aperçu des structuresAccéder aux champs d'une structureStructures mutablesLes structures comme paramètres de fonctionStructures tupleRécapitulatif - Créer une structure Book2Introduction aux vecteurs
Qu'est-ce qu'un vecteur ?Créer un vecteurAjouter des éléments avec pushAccéder aux éléments d'un vecteurItérer sur un vecteurItération mutableSupprimer des élémentsRécapitulatif - Suivi de score basique5Paires clé-valeur avec les Hash Maps
Qu'est-ce qu'une Hash Map ?Créer une Hash MapInsérer des paires clé-valeurAccéder aux valeursParcourir une Hash MapMettre à jour une valeurSupprimer une paireRécapitulatif - Compteur de mots8Projet : Inventaire d'articles simple
Configuration du projetAjouter un articleVérifier le stockVendre un articleAssembler le tout3Liste de tâches en ligne de commande
Configuration du projetAjouter une tâcheAfficher toutes les tâchesSupprimer une tâcheCode final