Filter
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 24 من 56.
تأخذ filter إغلاقاً شرطياً (predicate closure) وتُعيد مصفوفة جديدة تحتوي فقط على العناصر التي أعاد الإغلاق لها القيمة true.
let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]تحافظ النتيجة على الترتيب الأصلي. يتطابق نوع النتيجة مع نوع الإدخال، ولا يحدث أي تحويل، بل مجرد عملية اختيار.
يتسلسل filter بشكل طبيعي مع map:
let big = nums
.filter { $0 > 2 }
.map { $0 * $0 }
print(big) // [9, 16, 25, 36]اقرأ كل سلسلة من الأعلى إلى الأسفل، تماماً مثل خط الأنابيب. تنتج كل خطوة مصفوفة جديدة؛ ولا شيء يعدل الأصل.
التحدي
سهلاقرأ سطرين من المدخلات:
- قائمة من الأعداد الصحيحة مفصولة بفاصلة
, - عدد صحيح
min
اطبع، في أسطر منفصلة:
- الأعداد الصحيحة التي هي أكبر تماماً من
min، مدمجة بفاصلة,(أو فارغة إذا لم يتوفر أي منها) - مربعات الأعداد الصحيحة المؤهلة، مدمجة بفاصلة
, - عدد الأعداد الصحيحة المؤهلة
استخدم filter + map كسلسلة واحدة. لا تقم بالتكرار مرتين عبر المدخلات.
للمدخلات 1,5,2,8,3,7 في السطر الأول و 4 في السطر الثاني، تكون المخرجات:
5,8,7
25,64,49
3ورقة مرجعية
استخدم filter لتحديد العناصر التي تطابق شرطاً معيناً:
let evens = [1,2,3,4].filter { $0 % 2 == 0 } // [2, 4]اربط filter مع map كأنبوب معالجة (pipeline):
let result = nums
.filter { $0 > 2 }
.map { $0 * $0 } // [9, 16, 25, 36]كل خطوة تعيد مصفوفة جديدة؛ المصفوفة الأصلية تبقى دون تغيير. يتم الحفاظ على الترتيب.
جرّب بنفسك
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!
// TODO: التصفية > min مرة واحدة، ثم التحويل إلى مربعات؛ طباعة كليهما، ثم العد
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلمات