Menu
Coddy logo textTech

Map Üzerinde Gezinme

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 26 / 65.

Map koleksiyonları ile çalışırken, genellikle her anahtar-değer çiftini işlemeniz gerekir. forEach yöntemi, bir map içindeki tüm girdiler üzerinde yineleme yapmak için temiz bir yol sunar ve hem anahtara hem de ona karşılık gelen değere erişmenizi sağlar.

forEach yöntemi, argüman olarak bir fonksiyon alır. Bu fonksiyon iki parametre alır: map'teki her bir girdi için anahtar ve değer. Yöntem, map'teki her bir anahtar-değer çifti için fonksiyonunuzu otomatik olarak bir kez çağırır.

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

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

Bu yaklaşım, her anahtara manuel olarak erişmekten veya diğer yöntemleri kullanarak harita (map) üzerinde döngü kurmaya çalışmaktan çok daha kullanışlıdır. forEach yöntemi, tüm yineleme mantığını sizin yerinize hallederek, bir haritadaki her girişi işlemeniz gerektiğinde kodunuzu daha temiz ve daha okunabilir hale getirir.

challenge icon

Görev

Kolay

Menü öğelerini ve satış verilerini analiz ederek bir restoranın günlük satış raporlama sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:

  1. Restoran adını temsil eden bir dize (string) girdisi okuyun
  2. Menü öğelerini ve satış tutarlarını temsil eden birden fazla girdi çifti okuyun (girdi "sales_done" değerini aldığınızda sona erecektir)
  3. Her menü öğesini anahtar (key) ve satış tutarını değer (value) olarak saklamak için bir Map oluşturun
  4. Satış verileri arasında gezinmek ve toplam geliri hesaplamak için forEach metodunu kullanın
  5. En çok satan öğeyi (en yüksek satış tutarı) belirlemek için forEach metodunu tekrar kullanın
  6. Satış raporunu aşağıda gösterilen tam formatta yazdırın

Örneğin, restoran adı "Mario's Pizza" ise ve satış verileri 450 ile "Margherita Pizza", 280 ile "Caesar Salad", 320 ile "Garlic Bread", 180 ile "Tiramisu" içeriyorsa, programınız şu çıktıyı vermelidir:

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

Eğer restoran adı "Sushi Express" ise ve satış verileri 380 ile "California Roll", 520 ile "Salmon Sashimi", 150 ile "Miso Soup" içeriyorsa, programınız şu çıktıyı vermelidir:

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

Eğer restoran adı "Burger Palace" ise ve satış verileri 600 ile "Classic Burger", 400 ile "French Fries", 250 ile "Milkshake", 180 ile "Onion Rings" içeriyorsa, programınız şu çıktıyı vermelidir:

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

Programınız, Map girişleri arasında gezinmek için forEach metodunu kullanmalıdır. İlk olarak, her menü öğesini ve satış tutarını görüntülemek ve aynı zamanda toplam geliri hesaplamak için forEach kullanın. Ardından, en yüksek satış tutarına sahip öğeyi bulmak için forEach metodunu tekrar kullanın. Giriş formatı şu şekilde olacaktır: restoran adı, ardından sırasıyla menü öğesi adları ve satış tutarları (tam sayıya dönüştürülmesi gereken dizeler olarak), "sales_done" ile biter.

Kopya kağıdı

forEach yöntemi, bir Map içindeki tüm anahtar-değer çiftleri üzerinde gezinmenizi sağlar. Her bir girdi için anahtar ve değer olmak üzere iki parametre alan bir fonksiyon kabul eder.

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

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

forEach yöntemi, fonksiyonunuzu map'teki her bir anahtar-değer çifti için otomatik olarak bir kez çağırır; bu da manuel yineleme mantığına gerek kalmadan tüm girdileri işlemeyi kolaylaştırır.

Kendin dene

import 'dart:io';

void main() {
  // Restoran adını oku
  String? restaurantName = stdin.readLineSync();
  
  // Menü öğelerini ve satış miktarlarını saklamak için bir Map oluştur
  Map<String, int> salesData = {};
  
  // "sales_done" gelene kadar menü öğelerini ve satış miktarlarını oku
  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: Kodunuzu aşağıya yazın
  // Toplam geliri hesaplamak ve satış verilerini görüntülemek için forEach kullanın
  // En çok satan öğeyi bulmak için tekrar forEach kullanın
  
  // Satış raporunu istenen formatta yazdır
  print("Restaurant: $restaurantName");
  print("Daily Sales Report:");
  // Her bir öğeyi görüntüle ve toplamı hesapla
  // En çok satan öğeyi bul ve görüntüle
  // Toplam geliri ve durumu görüntüle
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler