AnyCompiler

Collections y la Librería Estándar

HashMap<K, V> almacena pares clave-valor, igual que un dictionary en Python o un object en JavaScript — pero con los tipos de clave y valor fijados de antemano. Indexar con [] produce un panic si falta la clave, mientras que .get() devuelve un Option, lo que te permite manejar una clave faltante sin que el programa falle.

use std::collections::HashMap;

fn main() {
    let mut scores: HashMap<String, i32> = HashMap::new();
    scores.insert(String::from("Alice"), 95);
    scores.insert(String::from("Bob"), 87);

    println!("{}", scores["Alice"]);

    if let Some(score) = scores.get("Bob") {
        println!("Bob: {}", score);
    }
}
Output
95
Bob: 87

La API entry

entry().or_insert() es la forma idiomática que tiene Rust de actualizar-o-insertar en un solo paso: devuelve una referencia mutable al valor, insertando primero un valor por defecto si la clave no estaba ya ahí. contains_key comprueba la presencia de una clave sin necesidad de manejar un Option en absoluto.

use std::collections::HashMap;

fn main() {
    let mut inventory: HashMap<&str, i32> = HashMap::new();
    inventory.insert("apples", 10);
    inventory.insert("bananas", 5);

    *inventory.entry("apples").or_insert(0) += 3;

    println!("apples: {}", inventory["apples"]);
    println!("has oranges: {}", inventory.contains_key("oranges"));
}
Output
apples: 13
has oranges: false

Esa es la base de Rust: ownership, borrowing, y un sistema de tipos que convierte categorías enteras de errores en errores de compilación en vez de sorpresas en tiempo de ejecución. A partir de aquí, el mejor siguiente paso es practicar — elige un programa pequeño y constrúyelo, apoyándote en los mensajes de error del compilador, que están entre los mejores de la industria, para guiarte.

Practice Exercise

Crea un HashMap<&str, i32> llamado ages. Inserta "Alice" -> 30 y "Bob" -> 25. Imprime ages["Alice"].

← Manejo de ErroresMás lecciones próximamente