Menu
CoddyTech

'where' ile Filtreleme

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

map() bir listedeki her öğeyi dönüştürürken, bazen sadece belirli kriterleri karşılayan öğeleri tutmak istersiniz. where() yöntemi, her bir öğeyi bir koşula karşı test ederek ve yalnızca testi geçenleri tutarak bir listeyi filtrelemenize olanak tanır.

where() yöntemi, her bir öğe için true veya false döndüren bir test fonksiyonu alır. true döndüren öğeler sonuca dahil edilirken, false döndürenler filtrelenir.

List<int> scores = [45, 78, 92, 33, 67, 88];

// Sadece 50'nin üzerindeki puanları tutmak için filtrele
var passingScores = scores.where((score) => score > 50);
print(passingScores);  // (78, 92, 67, 88)

Bu filtreleme yaklaşımı, bir liste üzerinde manuel olarak döngü kurmaktan ve yeni bir koleksiyon oluşturmaktan çok daha temizdir. where() yöntemi, veri işlemede temel bir kalıbı temsil eder ve veriyi nasıl çıkaracağınızdan ziyade neyi tutmak istediğinizi bildirimsel olarak belirtmenize olanak tanır.

challenge icon

Görev

Kolay

Öğrencileri test puanlarına göre filtreleyerek bir öğrenci performans takip sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:

  1. Sınıf adını temsil eden bir dize (string) girdisi okuyun
  2. Öğrenci test puanlarını temsil eden birden fazla tam sayı girdisi okuyun (girdi -1 aldığınızda sona erecektir)
  3. Minimum geçme puanı eşiğini temsil eden bir tam sayı girdisi okuyun
  4. Eşiğe eşit veya eşikten büyük olan puanları filtrelemek ve yalnızca bunları tutmak için where() yöntemini kullanın
  5. Filtreleme sonuçlarını aşağıda gösterilen tam formatta yazdırın

Örneğin, sınıf adı "Mathematics 101", puanlar 85, 42, 78, 91, 55, 88 ve eşik 70 ise programınız şu çıktıyı vermelidir:

Class: Mathematics 101
Original scores: [85, 42, 78, 91, 55, 88]
Minimum passing score: 70
Filtering scores >= 70
Passing scores: (85, 78, 91, 88)
Students passed: 4 out of 6
Pass rate: 66.67%

Eğer sınıf adı "Science Lab", puanlar 45, 38, 52 ve eşik 60 ise programınız şu çıktıyı vermelidir:

Class: Science Lab
Original scores: [45, 38, 52]
Minimum passing score: 60
Filtering scores >= 60
Passing scores: ()
Students passed: 0 out of 3
Pass rate: 0.00%

Eğer sınıf adı "History", puanlar 95, 88, 92 ve eşik 80 ise programınız şu çıktıyı vermelidir:

Class: History
Original scores: [95, 88, 92]
Minimum passing score: 80
Filtering scores >= 80
Passing scores: (95, 88, 92)
Students passed: 3 out of 3
Pass rate: 100.00%

Programınız, eşiğe eşit veya eşikten büyük puanları filtrelemek için where() yöntemini kullanmalıdır. Filtrelenmiş sonuç, bir yinelenebilir (iterable) olarak parantez formatında görüntülenecektir. Başarı oranını, (passing students / total students) * 100 formülünü kullanarak tam olarak 2 ondalık basamaklı bir yüzde olarak hesaplayın.

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);
  }
  
  // Minimum geçme puanı eşiğini oku
  int threshold = int.parse(stdin.readLineSync()!);
  
  // TODO: Kodunuzu aşağıya yazın
  // Puanları >= threshold şeklinde filtrelemek için where() metodunu kullanın
  
  // Sonuçları istenen formatta yazdırın
  print('Class: $className');
  print('Original scores: $scores');
  print('Minimum passing score: $threshold');
  print('Filtering scores >= $threshold');
  // Geçen puanları, geçen öğrenci sayısını ve geçme oranını yazdırın
}
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

Kendi başına pratik yap: Online Dart derleyicisi