Menu
Coddy logo textTech

Iterando sobre um Hash Map

Parte da seção Lógica & Fluxo do Journey de Rust da Coddy. Lição 31 de 66.

Às vezes, você precisa examinar cada par key-valor no seu mapa hash, em vez de consultar chaves específicas. Rust oferece uma maneira simples de percorrer todos os dados usando um loop for:

for (key, value) in &my_map {
    println!("{}: {}", key, value);
}

Observe o & antes de my_map — isso cria uma referência ao mapa de hash para que você possa iterar sem assumir a propriedade. O loop fornece cada par de chave-valor como uma tupla que você pode desestruturar diretamente na declaração do loop.

Aqui está um exemplo prático com uma lista de preços:

let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);

for (item, price) in &prices {
    println!("{} costs ${:.2}", item, price);
}

Há um detalhe importante a lembrar: os mapas hash não garantem nenhuma ordem específica de iteração. Os pares podem aparecer em uma sequência diferente cada vez que você executa seu programa. Isso acontece porque os mapas hash priorizam buscas rápidas em vez de manter a ordem de inserção; portanto, não conte com que os itens apareçam em uma sequência específica ao iterar.

challenge icon

Desafio

Fácil

Você receberá um inteiro n indicando o número de pares estudante-pontuação a serem processados. Em seguida, você receberá n pares de entradas: o nome de um estudante seguido pela pontuação de sua prova (como um inteiro). Crie um mapa hash para armazenar os nomes dos estudantes como chaves e suas pontuações como valores. Após inserir todos os pares, percorra o mapa hash e imprima o nome e a pontuação de cada estudante.

Requisitos:

  • Importe HashMap de std::collections
  • Crie um mapa hash mutável com os tipos HashMap<String, i32>
  • Leia a primeira entrada e converta-a para i32 para obter o número de pares
  • Use um loop para ler n pares de entradas (nome do estudante e, em seguida, pontuação)
  • Insira cada nome de estudante e sua pontuação no mapa hash
  • Use um loop for para percorrer o mapa hash com &map
  • Imprima as informações de cada estudante no formato: [name]: [score]
  • Imprima os pares em qualquer ordem (mapas hash não garantem a ordem)

Entrada:

  • Primeira linha: um inteiro n (por exemplo, 3)
  • Próximos n pares de linhas:
    • Nome do estudante (por exemplo, Alice)
    • Pontuação da prova como um inteiro (por exemplo, 95)

Saída:

  • Uma linha para cada estudante no formato: [name]: [score]
  • A ordem das linhas de saída pode variar entre as execuções dos testes

Experimente você mesmo

use std::collections::HashMap;
use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // Lê o número de pares aluno-pontuação
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Cria um hash map mutável para armazenar nomes de alunos e pontuações
    let mut students: HashMap<String, i32> = HashMap::new();
    
    // TODO: Escreva seu código abaixo
    // Lê n pares de entradas (nome do aluno e pontuação) e os insere no hash map
    
    
    
    // TODO: Itere sobre o hash map e imprima o nome e a pontuação de cada aluno
    
}
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 Lógica & Fluxo

Pratique por conta própria: Compilador de Rust online