Menu
CoddyTech

Melakukan perulangan pada Map

Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 26 dari 65.

Saat bekerja dengan koleksi Map, kamu sering perlu memproses setiap pasangan kunci-nilai. Method forEach menyediakan cara yang praktis untuk melakukan iterasi melalui semua entri dalam map, sehingga kamu dapat mengakses kunci dan nilai yang sesuai.

method forEach menerima fungsi sebagai argumen. Fungsi ini menerima dua parameter: kunci dan nilai untuk setiap entri dalam peta. method ini otomatis memanggil fungsimu satu kali untuk setiap pasangan kunci-nilai dalam peta.

Map<String, int> studentScores = {
  'Alice': 85,
  'Bob': 92,
  'Charlie': 78
};

studentScores.forEach((name, score) {
  print('$name scored $score points');
});
// output:
// Alice mendapat 85 poin
// Bob mendapat 92 poin
// Charlie mendapat 78 poin

Pendekatan ini jauh lebih praktis daripada mengakses setiap kunci secara manual atau mencoba melakukan perulangan pada map menggunakan cara lain. Method forEach menangani semua logika iterasi untukmu, sehingga kodemu lebih rapi dan mudah dibaca saat kamu perlu memproses setiap entri dalam map.

challenge icon

Tantangan

Mudah

Buat program yang mengelola sistem laporan penjualan harian restoran dengan menganalisis item menu dan data penjualannya. Programmu harus:

  1. Membaca input string yang berisi nama restoran
  2. Membaca beberapa pasang input yang berisi item menu dan jumlah penjualannya (input akan berakhir saat kamu menerima "sales_done")
  3. Membuat Map untuk menyimpan setiap item menu sebagai kunci dan jumlah penjualannya sebagai nilai
  4. Menggunakan method forEach untuk menelusuri data penjualan dan menghitung total pendapatan
  5. Menggunakan method forEach lagi untuk menentukan item terlaris (jumlah penjualan tertinggi)
  6. Mencetak laporan penjualan dengan format persis seperti yang ditunjukkan di bawah

Misalnya, jika nama restoran adalah "Mario's Pizza" dan data penjualannya mencakup "Margherita Pizza" dengan 450, "Caesar Salad" dengan 280, "Garlic Bread" dengan 320, "Tiramisu" dengan 180, programmu harus menghasilkan:

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

Jika nama restoran adalah "Sushi Express" dan data penjualannya mencakup "California Roll" dengan 380, "Salmon Sashimi" dengan 520, "Miso Soup" dengan 150, programmu harus menghasilkan:

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

Jika nama restoran adalah "Burger Palace" dan data penjualannya mencakup "Classic Burger" dengan 600, "French Fries" dengan 400, "Milkshake" dengan 250, "Onion Rings" dengan 180, programmu harus menghasilkan:

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

Programmu harus menggunakan method forEach untuk menelusuri entri Map. Pertama, gunakan forEach untuk menampilkan setiap item menu dan jumlah penjualannya, sekaligus menghitung total pendapatan. Lalu gunakan forEach lagi untuk menemukan item dengan jumlah penjualan tertinggi. Format inputnya adalah: nama restoran, lalu nama item menu dan jumlah penjualan secara bergantian (sebagai string yang perlu dikonversi menjadi bilangan bulat), diakhiri dengan "sales_done".

Coba sendiri

import 'dart:io';

void main() {
  // Baca nama restoran
  String? restaurantName = stdin.readLineSync();
  
  // Buat Map untuk menyimpan item menu dan jumlah penjualannya
  Map<String, int> salesData = {};
  
  // Baca item menu dan jumlah penjualan hingga "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: Tulis kodemu di bawah ini
  // Gunakan forEach untuk menghitung total pendapatan dan menampilkan data penjualan
  // Gunakan forEach lagi untuk mencari item terlaris
  
  // Cetak laporan penjualan dalam format yang diminta
  print("Restaurant: $restaurantName");
  print("Daily Sales Report:");
  // Tampilkan setiap item dan hitung totalnya
  // Cari dan tampilkan item terlaris
  // Tampilkan total pendapatan dan status
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online