التصفية باستخدام '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() نمطاً أساسياً في معالجة البيانات، مما يتيح لك تحديد ما تريد الاحتفاظ به بشكل تعبيري بدلاً من كيفية استخراجه.
التحدي
سهلقم بإنشاء برنامج يدير نظام تتبع أداء الطلاب من خلال تصفية الطلاب بناءً على درجات اختباراتهم. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (string) يمثل اسم الفصل الدراسي.
- قراءة مدخلات صحيحة (integer) متعددة تمثل درجات اختبار الطلاب (سينتهي الإدخال عندما تتلقى
-1). - قراءة مدخل صحيح (integer) يمثل الحد الأدنى لدرجة النجاح.
- استخدام طريقة
where()لتصفية والاحتفاظ فقط بالدرجات التي تكون أكبر من أو تساوي الحد الأدنى. - طباعة نتائج التصفية بالتنسيق الدقيق الموضح أدناه.
على سبيل المثال، إذا كان اسم الفصل هو "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');
// طباعة درجات النجاح، عدد الطلاب الناجحين، ونسبة النجاح
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1التعامل المتقدم مع القوائم
خصائص القائمة: first و lastحالة القائمة: isEmpty و isNotEmptyعكس القائمةالإضافة إلى القائمة: insertالحذف من القائمة: removeWhereالبحث في القائمة: indexOfفرز القائمةخلط القائمةملخص - منظم القوائم4معالجة الـ Map المتقدمة
التكرار عبر الـ Mapالتحقق من المفاتيح والقيمخصائص الـ Map: keys و valuesإضافة مشروطة: putIfAbsentإزالة العناصر من الـ Mapالـ Maps المتداخلةمراجعة - تحديث المخزون2عمليات القوائم الوظيفية
التحويل باستخدام 'map'التصفية باستخدام 'where'استخدام '.toList()'التحقق من الشروط باستخدام 'any'الشروط باستخدام 'every'البحث باستخدام 'firstWhere'مراجعة - تصفية البيانات5مشروع: حاسبة عربة التسوق
إعداد المشروعإضافة العناصر إلى العربة3المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدةتدرّب بنفسك: مترجم Dart عبر الإنترنت