الحذف من القائمة: removeWhere
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 5 من 65.
أحياناً تحتاج إلى إزالة عناصر متعددة من قائمة بناءً على شرط معين. بدلاً من إزالة العناصر واحداً تلو الآخر، توفر Dart طريقة removeWhere() التي يمكنها إزالة جميع العناصر التي تطابق شرط الاختبار في عملية واحدة.
تأخذ الطريقة removeWhere() دالة اختبار كمعامل لها. تستقبل هذه الدالة كل عنصر في القائمة وتعيد true إذا كان يجب إزالة العنصر، أو false إذا كان يجب أن يبقى. ثم تقوم الطريقة بإزالة جميع العناصر التي تعيد دالة الاختبار لها القيمة true.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// إزالة جميع الأرقام الزوجية
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]هذا النهج أكثر كفاءة بكثير من البحث عن العناصر وإزالتها يدوياً بشكل فردي. تقوم الطريقة removeWhere() بتعديل القائمة الأصلية مباشرةً، مما يجعلها أداة قوية لتنظيف القوائم بناءً على أي شرط يمكنك التعبير عنه كاختبار منطقي (boolean).
التحدي
سهلقم بإنشاء برنامج يدير نظام تصفية درجات الطلاب عن طريق إزالة الطلاب الراسبين من قائمة الفصل. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (string) يمثل اسم الفصل
- قراءة مدخلات صحيحة (integer) متعددة تمثل درجات الطلاب (سينتهي الإدخال عندما تتلقى
-1) - استخدام طريقة
removeWhere()لإزالة جميع الدرجات التي تقل عن 60 (درجات الرسوب) - طباعة نتائج تصفية الدرجات بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان اسم الفصل هو "Mathematics 101" والدرجات هي 85، 45، 92، 38، 76، 55، 88، يجب أن يخرج برنامجك ما يلي:
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: 3إذا كان اسم الفصل هو "History 201" وكانت جميع الدرجات ناجحة: 75، 82، 91، يجب أن يخرج برنامجك ما يلي:
Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0إذا كان اسم الفصل هو "Chemistry 301" وكانت جميع الدرجات راسبة: 45، 32، 58، يجب أن يخرج برنامجك ما يلي:
Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3يجب أن يستخدم برنامجك طريقة removeWhere() مع وظيفة اختبار (test function) تعيد true للدرجات التي تقل عن 60. يجب أن تقوم الطريقة بتعديل القائمة الأصلية عن طريق إزالة جميع درجات الرسوب، وترك درجات النجاح فقط.
ورقة مرجعية
تقوم الطريقة removeWhere() بإزالة كافة العناصر من القائمة التي تستوفي شرطاً معيناً. تأخذ هذه الطريقة دالة اختبار تُرجع true للعناصر المراد إزالتها و false للعناصر التي سيتم الاحتفاظ بها.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// إزالة جميع الأرقام الزوجية
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]تقوم هذه الطريقة بتعديل القائمة الأصلية مباشرة، وهي أكثر كفاءة من إزالة العناصر كلٌ على حدة.
جرّب بنفسك
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);
}
// تخزين الدرجات الأصلية للعرض
List<int> originalScores = List.from(scores);
// TODO: اكتب الكود الخاص بك أدناه
// لإزالة الدرجات الأقل من 60 removeWhere() استخدم دالة
// طباعة النتائج
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}');
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
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المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة