Menu
Coddy logo textTech

Iterar sobre un Hash Map

Parte de la sección Lógica y Flujo del Journey de Rust de Coddy. Lección 31 de 66.

A veces necesitas examinar cada par clave-valor de tu hash map, en lugar de buscar claves específicas. Rust proporciona una forma sencilla de recorrer todos los datos mediante un bucle for:

for (key, value) in &my_map {
    println!("{}: {}", key, value);
}

Observa el & antes de my_map: esto crea una referencia al mapa hash para que puedas iterar sin asumir su propiedad. El bucle te proporciona cada par clave-valor como una tupla que puedes desestructurar directamente en la declaración del bucle.

Aquí tienes un ejemplo práctico con una lista de precios:

let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);

for (item, price) in &prices {
    println!("{} costs ${:.2}", item, price);
}

Hay un detalle importante que recordar: los mapas hash no garantizan ningún orden de iteración específico. Los pares pueden aparecer en una secuencia diferente cada vez que ejecutas tu programa. Esto se debe a que los mapas hash priorizan las búsquedas rápidas por encima de mantener el orden de inserción, así que no dependas de que los elementos aparezcan en una secuencia determinada cuando realizas la iteración.

challenge icon

Desafío

Fácil

Recibirás un entero n que indica el número de pares de estudiante y puntuación que se procesarán. Después recibirás n pares de entradas: el nombre de un estudiante seguido de su puntuación en la prueba (como entero). Crea un mapa hash para almacenar los nombres de los estudiantes como claves y sus puntuaciones como valores. Después de insertar todos los pares, recorre el mapa hash e imprime el nombre y la puntuación de cada estudiante.

Requisitos:

  • Importa HashMap desde std::collections
  • Crea un mapa hash mutable con los tipos HashMap<String, i32>
  • Lee la primera entrada y conviértela a i32 para obtener el número de pares
  • Usa un bucle para leer n pares de entradas (nombre del estudiante, después puntuación)
  • Inserta cada nombre y puntuación del estudiante en el mapa hash
  • Usa un bucle for para recorrer el mapa hash con &map
  • Imprime la información de cada estudiante con el formato: [name]: [score]
  • Imprime los pares en cualquier orden (los mapas hash no garantizan el orden)

Entrada:

  • Primera línea: un entero n (por ejemplo, 3)
  • Siguientes n pares de líneas:
    • Nombre del estudiante (por ejemplo, Alice)
    • Puntuación de la prueba como entero (por ejemplo, 95)

Salida:

  • Una línea por cada estudiante con el formato: [name]: [score]
  • El orden de las líneas de salida puede variar entre ejecuciones de prueba

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();
    
    // Lee el número de pares estudiante-puntuación
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Crea un mapa hash mutable para almacenar nombres de estudiantes y puntuaciones
    let mut students: HashMap<String, i32> = HashMap::new();
    
    // TODO: Escribe tu código debajo
    // Lee n pares de entradas (nombre del estudiante y puntuación) e insertarlos en el mapa hash
    
    
    
    // TODO: Itera sobre el mapa hash e imprime el nombre y la puntuación de cada estudiante
    
}
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 Lógica y Flujo

Practica por tu cuenta: Compilador de Rust online