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.
Desafio
FácilVocê 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
HashMapdestd::collections - Crie um mapa hash mutável com os tipos
HashMap<String, i32> - Leia a primeira entrada e converta-a para
i32para obter o número de pares - Use um loop para ler
npares 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
forpara 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
npares de linhas:- Nome do estudante (por exemplo,
Alice) - Pontuação da prova como um inteiro (por exemplo,
95)
- Nome do estudante (por exemplo,
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
}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
1Fluxo de Controle Avançado
A Expressão 'match'Correspondência de Múltiplos ValoresCorrespondência de IntervalosA Expressão 'if let'Loops como ExpressõesRecapitulação - Parser de Comandos Simples4Agrupando Dados com Structs
O que é uma Struct?Visão Geral de StructsAcessando Campos de uma StructStructs MutáveisStructs como Parâmetros de FunçãoTuple StructsRecapitulação - Criando uma Struct Book2Introdução a Vetores
O que é um Vetor?Criando um VetorAdicionando Elementos com pushAcessando Elementos do VetorIterando sobre um VetorIteração MutávelRemovendo ElementosRecapitulação - Rastreador de Pontuação Básico5Pares Chave-Valor com Hash Maps
O que é um Hash Map?Criando um Hash MapInserindo Pares Chave-ValorAcessando ValoresIterando sobre um Hash MapAtualizando um ValorRemovendo um ParRecapitulação - Contador de Palavras8Projeto: Inventário Simples de Itens
Configuração do ProjetoAdicionando um ItemVerificando o EstoqueVendendo um ItemJuntando tudo3Lista de Tarefas via Linha de Comando
Configuração do ProjetoAdicionando uma TarefaVisualizando Todas as TarefasRemovendo uma TarefaCódigo FinalPratique por conta própria: Compilador de Rust online