Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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]

اقرأ كل سلسلة من الأعلى إلى الأسفل، تماماً مثل خط الأنابيب. تنتج كل خطوة مصفوفة جديدة؛ ولا شيء يعدل الأصل.

challenge icon

التحدي

سهل

اقرأ سطرين من المدخلات:

  1. قائمة من الأعداد الصحيحة مفصولة بفاصلة ,
  2. عدد صحيح min

اطبع، في أسطر منفصلة:

  1. الأعداد الصحيحة التي هي أكبر تماماً من min، مدمجة بفاصلة , (أو فارغة إذا لم يتوفر أي منها)
  2. مربعات الأعداد الصحيحة المؤهلة، مدمجة بفاصلة ,
  3. عدد الأعداد الصحيحة المؤهلة

استخدم 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 مرة واحدة، ثم التحويل إلى مربعات؛ طباعة كليهما، ثم العد
quiz iconاختبر نفسك

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

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