Menu
Coddy logo textTech

Eliminar un par

Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 33 de 66.

A veces necesitas eliminar datos de tu hash map por completo. Rust proporciona el método .remove() para eliminar un par clave-valor especificando la clave:

let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);

// Eliminar la entrada "apples" completamente
inventory.remove("apples");

El método .remove() toma la clave como parámetro y elimina tanto la clave como su valor asociado del hash map. Después de llamar a .remove("apples"), intentar buscar "apples" devolvería None.

Al igual que muchas operaciones de mapas hash, .remove() devuelve un Option. Devuelve Some(value) que contiene el valor eliminado si la clave existía, o None si no se encontró la clave:

let removed_value = inventory.remove("bananas");
match removed_value {
    Some(count) => println!("Removed {} bananas", count),
    None => println!("No bananas found to remove"),
}

Este valor de retorno le permite saber si la eliminación fue exitosa y le da acceso al valor que fue eliminado, lo cual puede ser útil para operaciones de registro o de limpieza.

challenge icon

Desafío

Fácil

Recibirás un entero n que indica el número de artículos en un inventario. Luego recibirás n pares de entradas: el nombre de un artículo seguido de su cantidad (como un entero). Después de eso, recibirás una entrada más con el nombre de un artículo para eliminar del inventario. Crea un hash map para almacenar el inventario, inserta todos los artículos, elimina el artículo especificado e imprime el resultado de la eliminación junto con el inventario restante.

Requisitos:

  • Importa HashMap de std::collections
  • Crea un hash map mutable con los tipos HashMap<String, i32>
  • Lee la primera entrada y conviértela a i32 para obtener el número de artículos
  • Usa un bucle para leer n pares de entradas (nombre del artículo, luego la cantidad)
  • Inserta cada artículo y su cantidad en el hash map
  • Lee una entrada más como el nombre del artículo a eliminar
  • Usa .remove() para eliminar el artículo del hash map
  • Usa match para manejar el Option devuelto por .remove()
  • Si el artículo fue encontrado y eliminado, imprime: Removed [quantity] [item_name]
  • Si el artículo no fue encontrado, imprime: [item_name] not found
  • Después de manejar la eliminación, itera sobre el hash map restante e imprime cada artículo en el formato: [item_name]: [quantity]

Entrada:

  • Primera línea: Un entero n (por ejemplo, 3)
  • Siguientes n pares de líneas:
    • Nombre del artículo (por ejemplo, apples)
    • Cantidad como un entero (por ejemplo, 50)
  • Última línea: Nombre del artículo a eliminar (por ejemplo, bananas)

Salida:

  • Primera línea: Ya sea Removed [quantity] [item_name] o [item_name] not found
  • Líneas siguientes: Una línea por cada artículo restante en el formato: [item_name]: [quantity]
  • El orden de los artículos restantes puede variar entre las ejecuciones de prueba

Hoja de referencia

Para eliminar un par clave-valor de un hash map, utiliza el método .remove() con la clave como parámetro:

let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);

inventory.remove("apples");

El método .remove() devuelve un Option: Some(value) si la clave existía, o None si no se encontró:

let removed_value = inventory.remove("bananas");
match removed_value {
    Some(count) => println!("Removed {} bananas", count),
    None => println!("No bananas found to remove"),
}

Pruébalo tú mismo

use std::collections::HashMap;
use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // Leer el número de artículos
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Crear un mapa hash mutable para almacenar el inventario
    let mut inventory: HashMap<String, i32> = HashMap::new();
    
    // Leer n pares de entradas (nombre del artículo y cantidad)
    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: Insertar el artículo y la cantidad en el mapa hash
    }
    
    // Leer el nombre del artículo a eliminar
    let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
    
    // TODO: Eliminar el artículo del mapa hash y manejar el resultado usando match
    // Imprimir el resultado de la eliminación (ya sea "Removed [quantity] [item_name]" o "[item_name] not found")
    
    // TODO: Iterar sobre el inventario restante e imprimir cada artículo en el formato "[item_name]: [quantity]"
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow