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 pointsBu 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.
Görev
KolayMenü öğ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:
- Restoran adını temsil eden bir dize (string) girdisi okuyun
- Menü öğelerini ve satış tutarlarını temsil eden birden fazla girdi çifti okuyun (girdi
"sales_done"değerini aldığınızda sona erecektir) - Her menü öğesini anahtar (key) ve satış tutarını değer (value) olarak saklamak için bir Map oluşturun
- Satış verileri arasında gezinmek ve toplam geliri hesaplamak için
forEachmetodunu kullanın - En çok satan öğeyi (en yüksek satış tutarı) belirlemek için
forEachmetodunu tekrar kullanın - 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 successfullyEğ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 successfullyEğ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 successfullyProgramı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 pointsforEach 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
}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
1İleri Düzey Liste İşlemleri
Liste Özellikleri: first & lastListe Durumu: isEmpty & isNotEmptyBir Listeyi Tersine ÇevirmeListeye Ekleme: insertListeden Silme: removeWhereListede Bulma: indexOfBir Listeyi SıralamaBir Listeyi KarıştırmaÖzet - Liste Düzenleyici4İleri Seviye Map İşlemleri
Map Üzerinde GezinmeAnahtar ve Değer KontrolüMap Özellikleri: keys & valuesKoşullu Ekleme: putIfAbsentMap'ten Öge Kaldırmaİç İçe Map'lerÖzet - Envanter Güncelleme7İleri Seviye Fonksiyonlar
Anonim FonksiyonlarFonksiyonları Argüman Olarak AktarmaClosure'ları AnlamakÖzyinelemeye GirişÖzyinelemeli Fonksiyon: Geri SayımÖzyinelemeli Fonksiyon: FaktöriyelÖzet - Liste İşleyici10Son Meydan Okumalar
Meydan Okuma: Not SıralayıcıMeydan Okuma: Sesli Harf SayacıMeydan Okuma: FizzBuzz2Fonksiyonel Liste İşlemleri
'map' ile Dönüştürme'where' ile Filtreleme'.toList()' Kullanımı'any' ile Koşul Kontrolü'every' ile Koşullar'firstWhere' ile BulmaÖzet - Veri Filtreleme5Proje: Alışveriş Sepeti Hesaplayıcı
Proje KurulumuSepete Ürün Ekleme3Kümeler
Küme Nedir?Küme OluşturmaKümelere Eleman Ekleme ve ÇıkarmaKüme İçinde Eleman KontrolüListeyi Kümeye DönüştürmeKüme BirleşimiKüme KesişimiKüme FarkıÖzet - Benzersiz Davetli Listesi