Rullst AcademyRullst Academy/Lección
Rust II: datos, decisiones y confianza · Lección 07 / 12

Un mapa para cada nombre

Contar equipos por nombre es distinto de consultarlos por posición. Un HashMap relaciona cada clave con un valor.

Rutas de aprendizaje12 min

Vamos a descubrir juntos

  1. 1

    use std::collections::HashMap trae el nombre del tipo al ámbito. HashMap<String, u16> relaciona nombres propios con cantidades. get consulta una clave y puede devolver None.

  2. 2

    entry(key).or_insert(0) devuelve una referencia mutable al valor existente o inserta cero si falta. *count += 1 cambia el valor al que apunta esa referencia.

  3. 3

    insert en una clave existente sustituye su valor; no suma automáticamente. Aquí entry acumula deliberadamente. Este pequeño conjunto fijo no alcanza el límite de u16.

  4. 4

    El orden de iteración de HashMap no está garantizado. Una interfaz o prueba con orden estable debe ordenar claves, usar BTreeMap o mantener otra secuencia. Aquí solo consultamos sensor.

DE LA LECCIÓN A LA PRÁCTICA

Una guía para seguir a tu ritmo

Lee los pasos antes de usar la referencia de abajo. Los comandos se ejecutan en el terminal del sistema indicado; el registro ocurre en el sitio oficial. Los ejercicios de Rullst Academy son práctica y no verifican tu instalación ni cuenta externa.

use std::collections::HashMap;
fn main() {
    let mut counts = HashMap::new();
    for name in ["sensor", "sensor", "motor", "sensor"] {
        let count = counts.entry(String::from(name)).or_insert(0_u16);
        *count += 1;
    }
    println!("{}", counts["sensor"]);
}

Enlaces oficiales y siguiente paso

✦
TU MISIÓN

Acumular cantidades con HashMap sin depender del orden de iteración.

Ahora te toca

Taller de descubrimientos

Lee, predice, investiga

Predice antes de mostrar. Este panel revela resultados preparados; no compila tu código. Los errores se resumen; el texto exacto puede variar con la versión del compilador.
Mini experimento

Simulación didáctica: compara tarjetas y comprueba tus predicciones. El navegador no compila Rust ni inicia un servidor.

use std::collections::HashMap;
fn main() {
    let mut counts = HashMap::new();
    for name in ["sensor", "sensor", "motor", "sensor"] {
        let count = counts.entry(String::from(name)).or_insert(0_u16);
        *count += 1;
    }
    println!("{}", counts["sensor"]);
}
Prepara tus respuestas y comprueba cuando estés listo.
Una pausa para entender

¿Cómo obtener una lista en orden previsible?

Necesito una pista

Un orden observado no es un contrato de HashMap.

Cargando tu camino…

Llévatelo contigo

Añade motor y cuéntalo por separado. Sustituye el acumulador por insert(name, 1), observa el defecto y escribe una prueba que lo detecte.

RUST II · .rs

Tu espacio de práctica Rust II

Lee, predice y responde aquí. Para compilar realmente, extrae el ZIP en una carpeta nueva, abre la terminal junto a Cargo.toml y usa estos comandos. Debes tener instalados Rust y las herramientas de tu sistema.

cargo check --offline
cargo test --offline
cargo run --offline
Mis archivos y GitHub

El editor guarda un borrador en este navegador y permite descargar o publicar tu .rs. Para ejecutarlo en el proyecto, guarda el archivo editado como src/main.rs. El ZIP contiene la versión inicial; los resultados preparados no cambian con tus ediciones. La evaluación online no verifica ejecución local.

A tu ritmo

Mis archivos y GitHub

Cada lección puede convertirse en un registro propio: código, notas o un plan de práctica. Guardar un archivo en GitHub es opcional y no cambia tus XP.

Manual del alumno

El editor y las descargas se abren cuando esta lección esté disponible para tu cuenta. Revisa el acceso indicado abajo o vuelve al mapa de la ruta.

Comprobando tu acceso a esta lección…

Rullstpetbot

La IA puede equivocarse. Consulta el material de la lección.