Menu
Coddy logo textTech

Acceder a los valores

Parte de la sección Lógica y Flujo del Journey de Rust de Coddy. Lección 30 de 66.

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

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

Sin embargo, hay un detalle importante que debes entender: .get() no devuelve directamente el valor. En su lugar, devuelve un tipo Option: un tipo integrado de Rust que representa “algo” o “nada”. Esto se debe a que es posible que la clave que buscas no exista en el mapa hash.

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

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

Quizás notes que el brazo de coincidencia usa Some(capital) sin un & explícito. Esto se debe a que Rust gestiona automáticamente la referencia por ti en este contexto: capital todavía contiene una referencia al valor, pero no necesitas escribir & explícitamente en el patrón. La coincidencia de patrones de Rust es lo suficientemente inteligente como para permitirte usar capital directamente, por ejemplo, al imprimirlo.

Este diseño evita que tu programa se bloquee cuando intentas acceder a una clave que no existe. En lugar de provocar un error, Rust te obliga a gestionar ambas posibilidades: encontrar el valor o no encontrarlo, lo que hace que tu código sea más sólido 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 los nombres de los 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. Después, recibirás una tercera entrada con el nombre de otro país que deberás buscar. Usa el método .get() para recuperar la capital de este país y gestiona ambos casos: cuando el país existe en el mapa y cuando no existe.

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 gestionará automáticamente la referencia, por lo que puedes usar capital directamente en tu instrucción de impresión.

Requisitos:

  • Importa HashMap desde 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 que se buscará
  • Usa .get() para recuperar la capital del país buscado
  • Usa match para gestionar 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 que se insertará (por ejemplo, France)
  • Segunda línea: nombre de la ciudad capital (por ejemplo, Paris)
  • Tercera línea: nombre del país que se 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

Pruébalo tú mismo

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

fn main() {
    // Lee 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();
    
    // Lee 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();
    
    // Lee 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 debajo
    // Crea un HashMap, inserta el país y la capital, luego busca 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 Lógica y Flujo

Practica por tu cuenta: Compilador de Rust online