Menu
Coddy logo textTech

Acceder a los valores

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

Una vez que tengas datos almacenados en tu hash map, necesitarás una forma de recuperarlos. El método .get() te permite buscar un valor utilizando su clave:

let value = my_map.get("some_key");

Sin embargo, hay un detalle importante que entender: .get() no devuelve directamente el valor. En su lugar, devuelve un tipo Option, un tipo integrado de Rust que representa si un valor está presente (Some) o ausente (None). Esto se debe a que la clave que estás buscando podría no existir en el hash map.

Cuando la clave existe, .get() devuelve Some(&value) - observa el símbolo &, lo que significa que obtienes una referencia al valor. Cuando la clave no existe, devuelve None:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

En el brazo del match Some(capital), Rust maneja automáticamente la referencia por ti — capital aquí está vinculado al valor referenciado interno, por lo que no necesitas escribir & explícitamente en el patrón.

Este diseño evita que tu programa se bloquee cuando intentas acceder a una clave que no existe. En lugar de causar un error, Rust te obliga a manejar ambas posibilidades (encontrar el valor o no encontrarlo), lo que hace que tu código sea más robusto y predecible.

challenge icon

Desafío

Fácil

Recibirás dos entradas: el nombre de un país y el nombre de una ciudad capital. Crea un mapa hash que almacene nombres de países como claves (tipo String) y sus ciudades capitales como valores (tipo String). Inserta el país y su capital en el mapa hash. Luego, recibirás una tercera entrada con otro nombre de país para buscar. Utiliza el método .get() para recuperar la capital de este país y maneja ambos casos: cuando el país existe en el mapa y cuando no.

Nota: .get() devuelve un Option — ya sea Some(&value) (una referencia al valor) cuando la clave existe, o None cuando no existe. En un brazo de match, puedes escribir Some(capital) y Rust manejará automáticamente la referencia por ti, de modo que puedes usar capital directamente en tu sentencia de impresión.

Requerimientos:

  • Importa HashMap de std::collections
  • Crea un mapa hash mutable con los tipos HashMap<String, String>
  • Lee la primera entrada como el nombre del país
  • Lee la segunda entrada como el nombre de la ciudad capital
  • Inserta el país y la capital en el mapa hash
  • Lee la tercera entrada como el país a buscar
  • Usa .get() para recuperar la capital del país buscado
  • Usa match para manejar el Option devuelto por .get()
  • Si se encuentra el país, imprime: The capital of [country] is [capital]
  • Si no se encuentra el país, imprime: [country] not found in the map

Entrada:

  • Primera línea: Nombre del país a insertar (por ejemplo, France)
  • Segunda línea: Nombre de la ciudad capital (por ejemplo, Paris)
  • Tercera línea: Nombre del país a buscar (por ejemplo, France o Germany)

Salida:

  • Si el país buscado existe: The capital of [country] is [capital]
  • Si el país buscado no existe: [country] not found in the map

Hoja de referencia

El método .get() recupera un valor de un hash map utilizando su clave:

let value = my_map.get("some_key");

El método .get() devuelve un tipo Option porque la clave podría no existir en el hash map:

  • Cuando la clave existe: devuelve Some(&value) (una referencia al valor)
  • Cuando la clave no existe: devuelve None

Usa match para manejar ambos casos:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

Este diseño evita fallos al acceder a claves inexistentes al obligarte a manejar ambas posibilidades.

Pruébalo tú mismo

use std::collections::HashMap;
use std::io;

fn main() {
    // Leer el nombre del país a insertar
    let mut country = String::new();
    io::stdin().read_line(&mut country).expect("Failed to read line");
    let country = country.trim().to_string();
    
    // Leer el nombre de la ciudad capital
    let mut capital = String::new();
    io::stdin().read_line(&mut capital).expect("Failed to read line");
    let capital = capital.trim().to_string();
    
    // Leer el nombre del país a buscar
    let mut lookup_country = String::new();
    io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
    let lookup_country = lookup_country.trim().to_string();
    
    // TODO: Escribe tu código abajo
    // Crear un HashMap, insertar el país y la capital, luego buscar el país
    
}
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