Insertar pares clave-valor
Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 29 de 66.
Ahora que tienes un hash map vacío, es hora de añadirle algunos datos. Puedes insertar pares clave-valor en un hash map utilizando el método .insert():
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");El método .insert() toma dos parámetros: la clave y el valor. En este ejemplo, estamos almacenando nombres de países como claves y sus ciudades capitales como valores.
Hay un comportamiento importante que recordar: si insertas una clave que ya existe en el hash map, el nuevo valor sobrescribirá al antiguo:
capitals.insert("France", "Lyon"); // Esto sobrescribe "Paris"Después de esta operación, buscar "France" devolvería "Lyon" en lugar de "Paris". Este comportamiento de sobrescritura hace que .insert() sea útil tanto para añadir nuevas entradas como para actualizar las existentes en su hash map.
Desafío
FácilRecibirás tres entradas: un nombre de producto, su precio (como un número decimal) y otro nombre de producto. Crea un mapa hash mutable para almacenar nombres de productos como claves (tipo String) y sus precios como valores (tipo f64). Inserta el primer producto con su precio en el mapa hash. Luego, inserta el segundo producto con un precio de 0.0. Finalmente, actualiza el precio del segundo producto a 15.99 insertándolo de nuevo con el nuevo precio. Imprime toda la información en el formato exacto que se muestra a continuación.
Nota sobre .clone(): Al insertar una variable String como clave en un HashMap, las reglas de propiedad (ownership) de Rust significan que la variable será movida al mapa y ya no podrá usarse después. Para seguir usando la variable (por ejemplo, para imprimirla o insertarla de nuevo), llama a .clone() sobre ella al pasarla a insert(). Por ejemplo: map.insert(name.clone(), price).
Requisitos:
- Importa
HashMapdestd::collections - Crea un mapa hash mutable con los tipos
HashMap<String, f64> - Lee la primera entrada como el nombre del primer producto
- Lee la segunda entrada y conviértela a
f64para el precio del primer producto - Inserta el primer producto y su precio en el mapa hash usando
.clone()en el nombre del producto - Lee la tercera entrada como el nombre del segundo producto
- Inserta el segundo producto con un precio de
0.0usando.clone()en el nombre del producto - Inserta el segundo producto nuevamente con un precio de
15.99usando.clone()(esto sobrescribirá el valor anterior) - Imprime la información de ambos productos en el formato exacto que se muestra a continuación
Entrada:
- Primera línea: Nombre del primer producto (por ejemplo,
Laptop) - Segunda línea: Precio del primer producto como un número decimal (por ejemplo,
999.99) - Tercera línea: Nombre del segundo producto (por ejemplo,
Mouse)
Salida:
- Primera línea:
Inserted [first_product] at $[price] - Segunda línea:
Inserted [second_product] at $0.00 - Tercera línea:
Updated [second_product] to $15.99
Hoja de referencia
Para insertar pares clave-valor en un hash map, utiliza el método .insert():
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");El método .insert() toma dos parámetros: la clave y el valor.
Si insertas una clave que ya existe, el nuevo valor sobrescribirá al anterior:
capitals.insert("France", "Lyon"); // Esto sobrescribe "Paris"Este comportamiento de sobrescritura hace que .insert() sea útil tanto para añadir nuevas entradas como para actualizar las existentes.
Pruébalo tú mismo
use std::collections::HashMap;
use std::io;
fn main() {
// Leer entradas
let mut product1 = String::new();
io::stdin().read_line(&mut product1).expect("Failed to read line");
let product1 = product1.trim().to_string();
let mut price1_input = String::new();
io::stdin().read_line(&mut price1_input).expect("Failed to read line");
let price1: f64 = price1_input.trim().parse().expect("Failed to parse price");
let mut product2 = String::new();
io::stdin().read_line(&mut product2).expect("Failed to read line");
let product2 = product2.trim().to_string();
// TODO: Escribe tu código abajo
// Crear un HashMap mutable, insertar productos y mostrar la salida requerida
}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