Iterando sobre um Map
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 26 de 65.
Ao trabalhar com coleções Map, você frequentemente precisa processar cada par chave-valor. O método forEach fornece uma maneira limpa de iterar por todas as entradas em um mapa, dando a você acesso tanto à chave quanto ao seu valor correspondente.
O método forEach recebe uma função como argumento. Esta função recebe dois parâmetros: a chave e o valor para cada entrada no mapa. O método chama automaticamente sua função uma vez para cada par chave-valor no mapa.
Map<String, int> studentScores = {
'Alice': 85,
'Bob': 92,
'Charlie': 78
};
studentScores.forEach((name, score) {
print('$name scored $score points');
});
// Saída:
// Alice scored 85 points
// Bob scored 92 points
// Charlie scored 78 pointsEsta abordagem é muito mais conveniente do que acessar manualmente cada chave ou tentar percorrer o mapa usando outros métodos. O método forEach lida com toda a lógica de iteração para você, tornando seu código mais limpo e legível quando você precisa processar cada entrada em um mapa.
Desafio
FácilCrie um programa que gerencie o sistema de relatórios de vendas diárias de um restaurante, analisando os itens do menu e seus dados de vendas. Seu programa deve:
- Ler uma entrada de string representando o nome do restaurante
- Ler múltiplos pares de entradas representando itens do menu e seus valores de vendas (a entrada terminará quando você receber
"sales_done") - Criar um Map para armazenar cada item do menu como a chave e seu valor de vendas como o valor
- Usar o método
forEachpara iterar pelos dados de vendas e calcular a receita total - Usar o método
forEachnovamente para identificar o item mais vendido (maior valor de vendas) - Imprimir o relatório de vendas no formato exato mostrado abaixo
Por exemplo, se o nome do restaurante for "Mario's Pizza" e os dados de vendas incluírem "Margherita Pizza" com 450, "Caesar Salad" com 280, "Garlic Bread" com 320, "Tiramisu" com 180, seu programa deve exibir:
Restaurant: Mario's Pizza
Daily Sales Report:
Margherita Pizza: $450
Caesar Salad: $280
Garlic Bread: $320
Tiramisu: $180
Total Revenue: $1230
Best Selling Item: Margherita Pizza ($450)
Status: Sales report generated successfullySe o nome do restaurante for "Sushi Express" e os dados de vendas incluírem "California Roll" com 380, "Salmon Sashimi" com 520, "Miso Soup" com 150, seu programa deve exibir:
Restaurant: Sushi Express
Daily Sales Report:
California Roll: $380
Salmon Sashimi: $520
Miso Soup: $150
Total Revenue: $1050
Best Selling Item: Salmon Sashimi ($520)
Status: Sales report generated successfullySe o nome do restaurante for "Burger Palace" e os dados de vendas incluírem "Classic Burger" com 600, "French Fries" com 400, "Milkshake" com 250, "Onion Rings" com 180, seu programa deve exibir:
Restaurant: Burger Palace
Daily Sales Report:
Classic Burger: $600
French Fries: $400
Milkshake: $250
Onion Rings: $180
Total Revenue: $1430
Best Selling Item: Classic Burger ($600)
Status: Sales report generated successfullySeu programa deve usar o método forEach para iterar pelas entradas do Map. Primeiro, use forEach para exibir cada item do menu e seu valor de vendas, enquanto também calcula a receita total. Depois, use forEach novamente para encontrar o item com o maior valor de vendas. O formato de entrada será: nome do restaurante, seguido por nomes de itens do menu e valores de vendas alternados (como strings que precisam ser convertidas para inteiros), terminando com "sales_done".
Folha de consulta
O método forEach permite que você itere por todos os pares chave-valor em um Map. Ele recebe uma função que recebe dois parâmetros: a chave e o valor para cada entrada.
Map<String, int> studentScores = {
'Alice': 85,
'Bob': 92,
'Charlie': 78
};
studentScores.forEach((name, score) {
print('$name scored $score points');
});
// Saída:
// Alice scored 85 points
// Bob scored 92 points
// Charlie scored 78 pointsO método forEach chama automaticamente sua função uma vez para cada par chave-valor no mapa, tornando-o conveniente para processar todas as entradas sem lógica de iteração manual.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler o nome do restaurante
String? restaurantName = stdin.readLineSync();
// Criar um Map para armazenar os itens do menu e seus valores de vendas
Map<String, int> salesData = {};
// Ler itens do menu e valores de vendas até "sales_done"
while (true) {
String? input = stdin.readLineSync();
if (input == "sales_done") {
break;
}
String menuItem = input!;
String? salesAmountStr = stdin.readLineSync();
int salesAmount = int.parse(salesAmountStr!);
salesData[menuItem] = salesAmount;
}
// TODO: Escreva seu código abaixo
// Use forEach para calcular a receita total e exibir os dados de vendas
// Use forEach novamente para encontrar o item mais vendido
// Imprimir o relatório de vendas no formato exigido
print("Restaurant: $restaurantName");
print("Daily Sales Report:");
// Exibir cada item e calcular o total
// Encontrar e exibir o item mais vendido
// Exibir a receita total e o status
}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
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos