filter والمسندات
حدّد العناصر التي تستوفي شرطًا.
filter والمسندات درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
ما هي filter؟
تحتفظ filter بالعناصر التي يُرجع الإغلاق، أو المسند، القيمة true لها فقط.
- يُرجع الإغلاق قيمة من النوع
Bool - يبقى نوع العنصر كما هو
- تكون النتيجة مصفوفة جديدة، وقد تكون أصغر حجمًا
مثال بسيط على filter
الاحتفاظ بالأعداد الزوجية فقط:
let numbers = [1, 2, 3, 4, 5, 6]
let evens = numbers.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]تصفية السلاسل النصية
الاحتفاظ بالكلمات التي يزيد طولها على ثلاثة أحرف:
let words = ["hi", "swift", "go", "filter"]
let long = words.filter { $0.count > 3 }
print(long) // ["swift", "filter"]ما هو المسند؟
المسند هو ببساطة دالة تستقبل قيمة وتُرجع Bool. تستدعي filter المسند مرة واحدة لكل عنصر، وتحتفظ بالقيمة عندما تكون نتيجة المسند true.
تسمية مسند
يمكن تخزين المسندات وإعادة استخدامها لتحسين سهولة القراءة:
let isPositive: (Int) -> Bool = { $0 > 0 }
let data = [-2, 5, -1, 8]
print(data.filter(isPositive)) // [5, 8]الجمع بين الشروط
استخدموا العوامل المنطقية داخل المسند:
let nums = [1, 2, 3, 4, 5, 6, 7, 8]
let picked = nums.filter { $0 % 2 == 0 && $0 > 4 }
print(picked) // [6, 8]تصفية البنى
صفّوا مجموعة من كائنات النموذج باستخدام إحدى الخصائص:
struct Product { let name: String; let price: Int }
let items = [Product(name: "Pen", price: 2), Product(name: "Bag", price: 40)]
let cheap = items.filter { $0.price < 10 }
print(cheap.map { $0.name }) // ["Pen"]filter في مقابل map
تجيب الدالتان عن سؤالين مختلفين: تختار filter العناصر التي تبقى، بينما تغيّر map كل عنصر. وتختلف أنواع النتائج:
let n = [1, 2, 3, 4]
print(n.filter { $0 > 2 }) // [3, 4] (subset, same type)
print(n.map { $0 > 2 }) // [false, false, true, true]تسلسل filter و map
صفّوا أولًا لتقليل حجم العمل، ثم أجروا التحويل:
let nums = [1, 2, 3, 4, 5, 6]
let result = nums
.filter { $0 % 2 == 0 }
.map { $0 * $0 }
print(result) // [4, 16, 36]العدّ من دون الاحتفاظ بالعناصر
إذا كنتم تحتاجون إلى العدد فقط، فإن filter(...).count تؤدي الغرض، لكن count(where:) تتجنب إنشاء مصفوفة:
let votes = [true, false, true, true]
let yes = votes.filter { $0 }.count
print(yes) // 3تصفية القاموس
تُرجع filter على القاموس قاموسًا من أزواج المفتاح والقيمة المطابقة:
let ages = ["Ann": 30, "Bo": 17, "Cy": 22]
let adults = ages.filter { $0.value >= 18 }
print(adults.keys.sorted()) // ["Ann", "Cy"]اختبار سريع
ما القيمة التي يجب أن يُرجعها مسند filter؟
مراجعة
لقد تعلمتم التصفية:
- تحتفظ
filterبالعناصر التي يكون فيها المسندtrue - المسند هو أي دالة تحوّل قيمة إلى
Bool - يُحافَظ على نوع العنصر، وقد تنكمش المصفوفة
- يمكنكم الجمع بين الشروط باستخدام
&&و||وتسلسلها معmap
التالي: reduce.
الأسئلة الشائعة
هل درس «filter والمسندات» مجاني؟
نعم — نص درس «filter والمسندات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «filter والمسندات»؟
حدّد العناصر التي تستوفي شرطًا. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «filter والمسندات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- map و compactMap
- filter والمسندات
- reduce و reduce(into:)
- flatMap والتسلسل