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.
Desafío
FácilRecibirá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
HashMapdesdestd::collections - Crea un mapa hash mutable con los tipos
HashMap<String, i32> - Lee la primera entrada y conviértela a
i32para obtener el número de pares - Usa un bucle para leer
npares de entradas (nombre del estudiante, después puntuación) - Inserta cada nombre y puntuación del estudiante en el mapa hash
- Usa un bucle
forpara 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
npares de líneas:- Nombre del estudiante (por ejemplo,
Alice) - Puntuación de la prueba como entero (por ejemplo,
95)
- Nombre del estudiante (por ejemplo,
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
}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