Insertar pares clave-valor
Parte de la sección Lógica y Flujo del Journey de Rust de Coddy. Lección 29 de 66.
Ahora que tienes un mapa hash vacío, es hora de agregarle algunos datos. Puedes insertar pares clave-valor en un mapa hash mediante el método .insert():
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");El método .insert() acepta dos parámetros: la clave y el valor. En este ejemplo, almacenamos nombres de países como claves y sus ciudades capitales como valores.
Hay un comportamiento importante que debes recordar: si insertas una clave que ya existe en el mapa hash, el nuevo valor sobrescribirá el anterior:
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 tu mapa hash.
Desafío
FácilRecibirás tres entradas: el nombre de un producto, su precio (como número decimal) y el nombre de otro producto. Crea un mapa hash mutable para almacenar los nombres de los productos como claves (tipo String) y sus precios como valores (tipo f64). Inserta el primer producto con su precio en el mapa hash. Después, inserta el segundo producto con un precio de 0.0. Finalmente, actualiza el precio del segundo producto a 15.99 insertándolo nuevamente 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 de Rust implican que la variable se movería al mapa y ya no podría utilizarse después. Para seguir utilizando 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
HashMapdesdestd::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 obtener 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 nuevamente el segundo producto 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 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
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 debajo
// Crea un HashMap mutable, inserta los productos e imprime la salida requerida
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
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 finalPractica por tu cuenta: Compilador de Rust online