Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Recibirá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 HashMap de std::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 f64 para 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.0 usando .clone() en el nombre del producto
  • Inserta el segundo producto nuevamente con un precio de 15.99 usando .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
    
}
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