Menu
Coddy logo textTech

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.

challenge icon

Défi

Facile

Vous 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 HashMap depuis std::collections
  • Créez une table de hachage mutable avec les types HashMap<String, i32>
  • Lisez la première entrée et convertissez-la en i32 pour obtenir le nombre d'articles
  • Utilisez une boucle pour lire n paires 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 match pour gérer l'Option renvoyé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)
  • n paires de lignes suivantes :
    • Nom de l'article (par exemple, apples)
    • Quantité sous forme d'entier (par exemple, 50)
  • 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]"
}
quiz iconTestez-vous

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