'firstWhere' ile Bulma
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 15 / 65.
Bir listede belirli kriterleri karşılayan özel bir öğe bulmanız gerektiğinde, firstWhere() yöntemi verimli bir çözüm sunar. Eşleşen tüm öğeleri döndüren filtreleme yöntemlerinin aksine, firstWhere() koşulunuzu sağlayan ilk öğeyi bulur bulmaz aramayı durdurur.
firstWhere() yöntemi, her bir öğe için true veya false döndüren bir test fonksiyonu alır. Testi geçen ilk öğeyi bulana kadar öğeleri tek tek inceler ve ardından hemen o öğeyi döndürür.
List<int> numbers = [1, 3, 8, 15, 22, 7];
// İlk çift sayıyı bul
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven); // 8Hiçbir öğenin koşulunuzla eşleşmediği durumlar için firstWhere(), isteğe bağlı bir orElse parametresi sunar. Bu parametre, eşleşme bulunamadığında varsayılan bir değer döndüren bir fonksiyonu kabul ederek programınızın bir hatayla çökmesini önler.
Görev
KolayAcil müdahale gerektiren ilk müşteri şikayetini bularak bir müşteri hizmetleri sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:
- Departman adını temsil eden bir dize (string) girdisi okuyun
- Şikayet öncelik seviyelerini temsil eden birden fazla tam sayı (integer) girdisi okuyun (girdi
-1değerini aldığınızda sona erecektir) - Acil öncelik eşiğini temsil eden bir tam sayı girdisi okuyun
- Acil eşiğe eşit veya bu eşikten büyük öncelik seviyesine sahip ilk şikayeti bulmak için
firstWhere()metodunu kullanın - Müşteri hizmetleri sonuçlarını aşağıda gösterilen tam formatta yazdırın
Örneğin, departman adı "Technical Support", öncelik seviyeleri 3, 7, 2, 9, 4 ve acil eşik 8 ise, programınızın çıktısı şöyle olmalıdır:
Department: Technical Support
All complaints: [3, 7, 2, 9, 4]
Urgent threshold: 8
Searching for first complaint >= 8
First urgent complaint: 9
Status: Urgent complaint found - immediate action requiredEğer departman adı "Billing Department", öncelik seviyeleri 4, 6, 3, 5 ve acil eşik 7 ise, programınızın çıktısı şöyle olmalıdır:
Department: Billing Department
All complaints: [4, 6, 3, 5]
Urgent threshold: 7
Searching for first complaint >= 7
First urgent complaint: Not found
Status: No urgent complaints - continue normal processingEğer departman adı "Sales Support", öncelik seviyeleri 10, 2, 8 ve acil eşik 9 ise, programınızın çıktısı şöyle olmalıdır:
Department: Sales Support
All complaints: [10, 2, 8]
Urgent threshold: 9
Searching for first complaint >= 9
First urgent complaint: 10
Status: Urgent complaint found - immediate action requiredProgramınız, acil eşiğe eşit veya bu eşikten büyük olan ilk şikayet önceliğini bulmak için firstWhere() metodunu kullanmalıdır. Acil bir şikayet bulunamazsa, ilk acil şikayet için "Not found" yazdırın ve durum olarak "No urgent complaints - continue normal processing" gösterin. Acil bir şikayet bulunursa, öncelik seviyesini yazdırın ve durum olarak "Urgent complaint found - immediate action required" gösterin.
Kopya kağıdı
firstWhere() yöntemi, bir listede belirli bir koşulu karşılayan ilk öğeyi bulur. Bir eşleşme bulur bulmaz aramayı durdurur ve o öğeyi döndürür.
List<int> numbers = [1, 3, 8, 15, 22, 7];
// Find the first even number
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven); // 8Hiçbir öğe koşulla eşleşmediğinde varsayılan bir değer sağlamak için orElse parametresini kullanın:
// Returns a default value if no match is found
int result = numbers.firstWhere(
(number) => number > 100,
orElse: () => -1
);Kendin dene
import 'dart:io';
void main() {
// Departman adını oku
String? department = stdin.readLineSync();
// -1 gelene kadar şikayet öncelik seviyelerini oku
List<int> complaints = [];
while (true) {
int priority = int.parse(stdin.readLineSync()!);
if (priority == -1) break;
complaints.add(priority);
}
// Acil durum eşiğini oku
int urgentThreshold = int.parse(stdin.readLineSync()!);
// TODO: Kodunuzu aşağıya yazın
// urgentThreshold değerine eşit veya büyük olan ilk şikayeti bulmak için firstWhere() metodunu kullanın
// Sonuçları yazdır
print('Department: $department');
print('All complaints: $complaints');
print('Urgent threshold: $urgentThreshold');
print('Searching for first complaint >= $urgentThreshold');
// İlk acil şikayet sonucunu yazdır
// Durum mesajını yazdır
}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