Menu
Coddy logo textTech

Iterar sobre un Hash Map

Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 31 de 66.

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

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

Observa el & antes de my_map: esto crea una referencia al hash map para que puedas iterar sin tomar la 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 ejecutes tu programa. Esto se debe a que los mapas hash priorizan las búsquedas rápidas sobre el mantenimiento del orden de inserción, así que no confíes en que los elementos aparezcan en ninguna secuencia particular cuando iteres.

challenge icon

Desafío

Fácil

Recibirás un entero n que indica el número de pares estudiante-calificación a procesar. Luego recibirás n pares de entradas: el nombre de un estudiante seguido de su calificación en el examen (como un entero). Crea un mapa hash para almacenar los nombres de los estudiantes como claves y sus calificaciones como valores. Después de insertar todos los pares, itera sobre el mapa hash e imprime el nombre y la calificación de cada estudiante.

Requisitos:

  • Importa HashMap de 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, luego calificación)
  • Inserta cada nombre de estudiante y calificación en el mapa hash
  • Usa un bucle for para iterar sobre el mapa hash con &map
  • Imprime la información de cada estudiante en 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)
    • Calificación del examen como un entero (por ejemplo, 95)

Salida:

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

Hoja de referencia

Para iterar sobre todos los pares clave-valor en un hash map, usa un bucle for con una referencia al mapa:

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

El & antes del hash map crea una referencia, permitiendo la iteración sin tomar la propiedad (ownership). El bucle desestructura cada par clave-valor como una tupla.

Ejemplo con un hash map:

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);
}

Importante: Los hash maps no garantizan ningún orden de iteración específico. Los pares pueden aparecer en diferentes secuencias cada vez que ejecutas tu programa, ya que los hash maps priorizan las búsquedas rápidas sobre el mantenimiento del orden de inserción.

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 pares estudiante-calificación
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Crear un mapa hash mutable para almacenar los nombres y calificaciones de los estudiantes
    let mut students: HashMap<String, i32> = HashMap::new();
    
    // TODO: Escribe tu código a continuación
    // Leer n pares de entradas (nombre del estudiante y calificación) e insertarlos en el mapa hash
    
    
    
    // TODO: Iterar sobre el mapa hash e imprimir el nombre y la calificació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 Logic & Flow