Menu
Coddy logo textTech

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 points

Esta 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.

challenge icon

Desafio

Fácil

Crie 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:

  1. Ler uma entrada de string representando o nome do restaurante
  2. Ler múltiplos pares de entradas representando itens do menu e seus valores de vendas (a entrada terminará quando você receber "sales_done")
  3. Criar um Map para armazenar cada item do menu como a chave e seu valor de vendas como o valor
  4. Usar o método forEach para iterar pelos dados de vendas e calcular a receita total
  5. Usar o método forEach novamente para identificar o item mais vendido (maior valor de vendas)
  6. 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 successfully

Se 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 successfully

Se 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 successfully

Seu 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 points

O 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
}
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