Listeden Silme: removeWhere
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 5 / 65.
Bazen belirli bir koşula bağlı olarak bir listeden birden fazla öğeyi kaldırmanız gerekir. Öğeleri tek tek kaldırmak yerine Dart, bir test koşuluyla eşleşen tüm öğeleri tek bir işlemde kaldırabilen removeWhere() metodunu sunar.
removeWhere() yöntemi, parametre olarak bir test fonksiyonu alır. Bu fonksiyon, listedeki her bir öğeyi alır ve öğenin kaldırılması gerekiyorsa true, kalması gerekiyorsa false değerini döndürür. Yöntem daha sonra, test fonksiyonunun true döndürdüğü tüm öğeleri kaldırır.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Tüm çift sayıları kaldır
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]Bu yaklaşım, öğeleri tek tek manuel olarak arayıp kaldırmaktan çok daha verimlidir. removeWhere() yöntemi orijinal listeyi doğrudan değiştirir, bu da onu bir boolean testi olarak ifade edebileceğiniz herhangi bir koşula göre listeleri temizlemek için güçlü bir araç haline getirir.
Görev
KolayBir sınıf listesinden kalan öğrencileri çıkararak öğrenci not filtreleme sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:
- Sınıf adını temsil eden bir dize (string) girdisi okuyun
- Öğrenci puanlarını temsil eden birden fazla tam sayı (integer) girdisi okuyun (girdi
-1değerini aldığınızda sona erecektir) - 60'ın altındaki tüm puanları (başarısız notlar) kaldırmak için
removeWhere()metodunu kullanın - Not filtreleme sonuçlarını tam olarak aşağıda gösterilen formatta yazdırın
Örneğin, sınıf adı "Mathematics 101" ve puanlar 85, 45, 92, 38, 76, 55, 88 ise programınız şu çıktıyı vermelidir:
Class: Mathematics 101
Original scores: [85, 45, 92, 38, 76, 55, 88]
Removed failing scores (below 60)
Passing scores: [85, 92, 76, 88]
Students passed: 4
Students failed: 3Eğer sınıf adı "History 201" ise ve tüm puanlar geçer not ise: 75, 82, 91, programınız şu çıktıyı vermelidir:
Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0Eğer sınıf adı "Chemistry 301" ise ve tüm puanlar başarısız ise: 45, 32, 58, programınız şu çıktıyı vermelidir:
Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3Programınız, 60'ın altındaki puanlar için true döndüren bir test fonksiyonu ile removeWhere() metodunu kullanmalıdır. Bu metod, tüm başarısız notları kaldırarak orijinal listeyi değiştirmeli ve geriye sadece geçen puanları bırakmalıdır.
Kopya kağıdı
removeWhere() yöntemi, bir listeden belirli bir koşulla eşleşen tüm öğeleri kaldırır. Kaldırılacak öğeler için true, tutulacak öğeler için false döndüren bir test fonksiyonu alır.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Tüm çift sayıları kaldır
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]Bu yöntem orijinal listeyi doğrudan değiştirir ve öğeleri tek tek kaldırmaktan daha verimlidir.
Kendin dene
import 'dart:io';
void main() {
// Sınıf adını oku
String? className = stdin.readLineSync();
// -1 ile karşılaşana kadar puanları oku
List<int> scores = [];
while (true) {
int score = int.parse(stdin.readLineSync()!);
if (score == -1) {
break;
}
scores.add(score);
}
// Görüntülemek için orijinal puanları sakla
List<int> originalScores = List.from(scores);
// TODO: Kodunuzu aşağıya yazın
// 60'ın altındaki puanları kaldırmak için removeWhere() metodunu kullanın
// Sonuçları yazdır
print('Class: $className');
print('Original scores: $originalScores');
print('Removed failing scores (below 60)');
print('Passing scores: $scores');
print('Students passed: ${scores.length}');
print('Students failed: ${originalScores.length - scores.length}');
}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