Menu
Coddy logo textTech

Acessando Valores

Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 30 de 66.

Depois de armazenar dados em seu hash map, você precisará de uma maneira de recuperá-los. O método .get() permite que você procure um valor usando sua chave:

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

No entanto, há um detalhe importante a entender: .get() não retorna o valor diretamente. Em vez disso, ele retorna um tipo Option — um tipo nativo do Rust que representa ou a presença de um valor (Some) ou a ausência (None). Isso ocorre porque a chave que você está procurando pode não existir no hash map.

Quando a chave existe, .get() retorna Some(&value) — observe o símbolo &, o que significa que você obtém uma referência para o valor. Quando a chave não existe, ele retorna None:

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

No braço de correspondência Some(capital), o Rust lida automaticamente com a referência para você — capital aqui está vinculado ao valor referenciado interno, então você não precisa escrever & explicitamente no padrão.

Este design evita que seu programa trave quando você tenta acessar uma chave que não existe. Em vez de causar um erro, o Rust força você a lidar com ambas as possibilidades - encontrar o valor ou não encontrá-lo - tornando seu código mais robusto e previsível.

challenge icon

Desafio

Fácil

Você receberá duas entradas: o nome de um país e o nome de uma capital. Crie um hash map que armazene nomes de países como chaves (tipo String) e suas capitais como valores (tipo String). Insira o país e sua capital no hash map. Em seguida, você receberá uma terceira entrada com outro nome de país para pesquisar. Use o método .get() para recuperar a capital deste país e trate ambos os casos: quando o país existe no mapa e quando não existe.

Nota: .get() retorna um Option — ou Some(&value) (uma referência ao valor) quando a chave existe, ou None quando não existe. Em um braço match, você pode escrever Some(capital) e o Rust lidará automaticamente com a referência para você, para que você possa usar capital diretamente em sua instrução de impressão.

Requisitos:

  • Importe HashMap de std::collections
  • Crie um hash map mutável com os tipos HashMap<String, String>
  • Leia a primeira entrada como o nome do país
  • Leia a segunda entrada como o nome da capital
  • Insira o país e a capital no hash map
  • Leia a terceira entrada como o país a ser pesquisado
  • Use .get() para recuperar a capital para o país pesquisado
  • Use match para tratar o Option retornado por .get()
  • Se o país for encontrado, imprima: The capital of [country] is [capital]
  • Se o país não for encontrado, imprima: [country] not found in the map

Entrada:

  • Primeira linha: Nome do país a inserir (ex: France)
  • Segunda linha: Nome da capital (ex: Paris)
  • Terceira linha: Nome do país a pesquisar (ex: France ou Germany)

Saída:

  • Se o país pesquisado existir: The capital of [country] is [capital]
  • Se o país pesquisado não existir: [country] not found in the map

Folha de consulta

O método .get() recupera um valor de um hash map usando sua chave:

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

O método .get() retorna um tipo Option porque a chave pode não existir no hash map:

  • Quando a chave existe: retorna Some(&value) (uma referência ao valor)
  • Quando a chave não existe: retorna None

Use match para lidar com ambos os casos:

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

Este design evita falhas ao acessar chaves inexistentes, forçando você a lidar com ambas as possibilidades.

Experimente você mesmo

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

fn main() {
    // Ler o nome do país para inserir
    let mut country = String::new();
    io::stdin().read_line(&mut country).expect("Failed to read line");
    let country = country.trim().to_string();
    
    // Ler o nome da capital
    let mut capital = String::new();
    io::stdin().read_line(&mut capital).expect("Failed to read line");
    let capital = capital.trim().to_string();
    
    // Ler o nome do país para 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: Escreva seu código abaixo
    // Criar um HashMap, inserir o país e a capital, e então buscar o país
    
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow