Menu
CoddyTech
flag Ar iconالعربيةdown icon

التصفية باستخدام 'where'

جزء من قسم المنطق وتدفق التنفيذ في رحلة Dart على Coddy. الدرس 11 من 65.

بينما تقوم map() بتحويل كل عنصر في القائمة، فإنك في بعض الأحيان ترغب فقط في الاحتفاظ بالعناصر التي تستوفي معايير محددة. تسمح لك طريقة where() بتصفية قائمة من خلال اختبار كل عنصر مقابل شرط معين والاحتفاظ فقط بالعناصر التي تجتاز الاختبار.

تأخذ الدالة where() دالة اختبار تُرجع true أو false لكل عنصر. يتم تضمين العناصر التي تُرجع true في النتيجة، بينما يتم استبعاد العناصر التي تُرجع false.

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

// تصفية للاحتفاظ فقط بالدرجات التي تزيد عن 50
var passingScores = scores.where((score) => score > 50);
print(passingScores);  // (78, 92, 67, 88)

هذا النهج في التصفية أنظف بكثير من التكرار يدوياً عبر قائمة وبناء مجموعة جديدة. تمثل طريقة where() نمطاً أساسياً في معالجة البيانات، مما يتيح لك تحديد ما تريد الاحتفاظ به بشكل تعبيري بدلاً من كيفية استخراجه.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يدير نظام تتبع أداء الطلاب من خلال تصفية الطلاب بناءً على درجات اختباراتهم. يجب على برنامجك القيام بما يلي:

  1. قراءة مدخل نصي (string) يمثل اسم الفصل الدراسي.
  2. قراءة مدخلات صحيحة (integer) متعددة تمثل درجات اختبار الطلاب (سينتهي الإدخال عندما تتلقى -1).
  3. قراءة مدخل صحيح (integer) يمثل الحد الأدنى لدرجة النجاح.
  4. استخدام طريقة where() لتصفية والاحتفاظ فقط بالدرجات التي تكون أكبر من أو تساوي الحد الأدنى.
  5. طباعة نتائج التصفية بالتنسيق الدقيق الموضح أدناه.

على سبيل المثال، إذا كان اسم الفصل هو "Mathematics 101"، والدرجات هي 85، 42، 78، 91، 55، 88، والحد الأدنى هو 70، يجب أن يخرج برنامجك ما يلي:

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%

إذا كان اسم الفصل هو "Science Lab"، والدرجات هي 45، 38، 52، والحد الأدنى هو 60، يجب أن يخرج برنامجك ما يلي:

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%

إذا كان اسم الفصل هو "History"، والدرجات هي 95، 88، 92، والحد الأدنى هو 80، يجب أن يخرج برنامجك ما يلي:

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%

يجب أن يستخدم برنامجك طريقة where() لتصفية الدرجات التي تكون أكبر من أو تساوي الحد الأدنى. سيتم عرض النتيجة المصفاة بتنسيق الأقواس ككائن قابل للتكرار (iterable). احسب معدل النجاح كنسبة مئوية مع منزلتين عشريتين بالضبط باستخدام الصيغة: (passing students / total students) * 100.

جرّب بنفسك

import 'dart:io';

void main() {
  // قراءة اسم الفصل
  String? className = stdin.readLineSync();
  
  // قراءة الدرجات حتى يتم إدخال -1
  List<int> scores = [];
  while (true) {
    int score = int.parse(stdin.readLineSync()!);
    if (score == -1) break;
    scores.add(score);
  }
  
  // قراءة الحد الأدنى لدرجة النجاح
  int threshold = int.parse(stdin.readLineSync()!);
  
  // TODO: اكتب الكود الخاص بك أدناه
  // استخدم طريقة where() لتصفية الدرجات >= threshold
  
  // طباعة النتائج بالتنسيق المطلوب
  print('Class: $className');
  print('Original scores: $scores');
  print('Minimum passing score: $threshold');
  print('Filtering scores >= $threshold');
  // طباعة درجات النجاح، عدد الطلاب الناجحين، ونسبة النجاح
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم Dart عبر الإنترنت