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.
Desafío
FácilRecibirá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
HashMapdestd::collections - Crea un hash map mutable con los tipos
HashMap<String, i32> - Lee la primera entrada y conviértela a
i32para obtener el número de artículos - Usa un bucle para leer
npares 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
matchpara manejar elOptiondevuelto 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
npares de líneas:- Nombre del artículo (por ejemplo,
apples) - Cantidad como un entero (por ejemplo,
50)
- Nombre del artículo (por ejemplo,
- Ú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]"
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Flujo de control avanzado
La expresión 'match'Coincidencia de múltiples valoresCoincidencia de rangosLa expresión 'if let'Bucles como expresionesResumen - Analizador de comandos simple4Agrupando datos con Structs
¿Qué es un Struct?Visión general de los StructsAcceso a los campos de un StructStructs mutablesStructs como parámetros de funcionesStructs de tuplaResumen - Crear un Struct de Libro7Manejo de errores con 'Result'
¿Qué es un 'Result'?Uso de 'match' con 'Result'is_ok() e is_err()Atajos: unwrap y expectEl operador de signo de interrogación '?'Parsing de Strings a númerosResumen - Función de división segura10Closures y funciones anónimas
¿Qué es un Closure?Definir un Closure simpleClosures con parámetrosCapturar el entornoResumen - Closure sumador simple2Introducción a los vectores
¿Qué es un vector?Crear un vectorAñadir elementos con pushAcceder a los elementos de un vectorIterar sobre un vectorIteración mutableEliminar elementosResumen: Rastreador de puntuación básico5Pares clave-valor con Hash Maps
¿Qué es un Hash Map?Crear un Hash MapInsertar pares clave-valorAcceder a los valoresIterar sobre un Hash MapActualizar un valorEliminar un parRepaso: Contador de palabras8Proyecto: Inventario simple de artículos
Configuración del proyectoAgregar un artículoVerificar el stockVender un artículoUniendo todo3Lista de tareas en la línea de comandos
Configuración del proyectoAñadir una tareaVer todas las tareasEliminar una tareaCódigo final