compactMap
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 28 من 56.
compactMap هي map مع تصفية القيم الاختيارية (optionals). يمكن أن يعيد الـ closure قيمة Optional؛ تقوم compactMap بإسقاط نتائج nil وفك تغليف (unwraps) الباقي.
let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // [3, 7, 1]Int("hi") يُرجع nil لأنه لا يمكنه تحليل رقم من "hi". تقوم compactMap باستبعاد تلك القيم تلقائيًا وتعطيك مصفوفة [Int] نظيفة.
بدونها، ستكتب strings.map { Int($0) } وستحصل على [Int?] مع وجود قيم nil مختلطة بها، ثم سيتعين عليك تصفيتها بنفسك. compactMap تقوم بكلا الخطوتين في خطوة واحدة.
التحدي
سهلاقرأ سطرًا واحدًا من المدخلات: مزيج مفصول بفاصلة من الأعداد الصحيحة والنصوص غير الصالحة (بعض المدخلات لا يمكن تحليلها).
اطبع:
- الأعداد الصحيحة (بترتيب الإدخال)، مفصولة بـ
, - عدد المدخلات التي تم إسقاطها (التي لم يمكن تحليلها)
- مجموع الأعداد الصحيحة التي تم تحليلها
للمدخل 3,hi,7,!,1,42,oops، المخرجات هي:
3,7,1,42
3
53ورقة مرجعية
تعمل compactMap مثل map ولكنها تقوم تلقائياً بإزالة نتائج nil وفك تغليف (unwraps) الباقي:
let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
// [3, 7, 1] — يتم إسقاط قيم nils الناتجة عن السلاسل النصية غير القابلة للتحليلبدون compactMap، ستعيد map مصفوفة من نوع [Int?] مع وجود قيم nils مختلطة بها، مما يتطلب خطوة تصفية (filter) منفصلة.
جرّب بنفسك
let parts = readLine()!.components(separatedBy: ",")
// TODO: compactMap إلى أعداد صحيحة (ints)؛ طباعة العناصر مدمجة، عدد العناصر المحذوفة، والمجموع
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلمات