استخدام where() مع القوائم في Dart

استخدام where() مع القوائم في Dart

الدالة where() في Dart تُستخدم لتصفية عناصر القائمة بناءً على شرط معين. تعيد هذه الدالة قائمة جديدة تحتوي فقط على العناصر التي تحقق الشرط.


صيغة الدالة where()

dartCopyEditList<T> where(bool test(T element))
  • test: دالة شرطية ترجع true إذا كان العنصر يحقق الشرط المطلوب.
  • العائد: قائمة جديدة تحتوي على العناصر التي تحقق الشرط.

أمثلة تفصيلية

1. تصفية الأرقام الزوجية

dartCopyEditvoid main() {
  List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

  var evenNumbers = numbers.where((number) => number % 2 == 0).toList();

  print('الأرقام الزوجية: $evenNumbers'); // [2, 4, 6, 8, 10]
}

2. تصفية الأسماء التي تبدأ بحرف معين

dartCopyEditvoid main() {
  List<String> names = ['Ali', 'Sara', 'Ahmad', 'Nora', 'Amal'];

  var filteredNames = names.where((name) => name.startsWith('A')).toList();

  print('الأسماء التي تبدأ بحرف A: $filteredNames'); // ['Ali', 'Ahmad', 'Amal']
}

3. تصفية الأرقام الأكبر من قيمة معينة

dartCopyEditvoid main() {
  List<int> numbers = [10, 25, 30, 5, 60, 15];

  var filteredNumbers = numbers.where((num) => num > 20).toList();

  print('الأرقام الأكبر من 20: $filteredNumbers'); // [25, 30, 60]
}

4. تصفية العناصر بناءً على طول النص

dartCopyEditvoid main() {
  List<String> words = ['Apple', 'Hi', 'Computer', 'Yes', 'Dart'];

  var longWords = words.where((word) => word.length > 3).toList();

  print('الكلمات التي تحتوي على أكثر من 3 أحرف: $longWords'); // ['Apple', 'Computer', 'Dart']
}

ملاحظة هامة

  • إذا لم تحقق أي عناصر الشرط، تعيد where() قائمة فارغة.
  • يمكن تحويل النتيجة إلى قائمة باستخدام .toList() لأن where() تعيد كائن Iterable.

استخدام مع الدوال المتداخلة

dartCopyEditbool isEven(int number) => number % 2 == 0;

void main() {
  List<int> numbers = [1, 2, 3, 4, 5, 6];

  var evenNumbers = numbers.where(isEven).toList();

  print('الأرقام الزوجية: $evenNumbers'); // [2, 4, 6]
}

ملخص

  • where() هي طريقة قوية لتصفية البيانات في القوائم.
  • تُسهل كتابة الكود بطريقة نظيفة وواضحة بدلًا من استخدام الحلقات التقليدية.