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

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 تقوم بكلا الخطوتين في خطوة واحدة.

challenge icon

التحدي

سهل

اقرأ سطرًا واحدًا من المدخلات: مزيج مفصول بفاصلة من الأعداد الصحيحة والنصوص غير الصالحة (بعض المدخلات لا يمكن تحليلها).

اطبع:

  1. الأعداد الصحيحة (بترتيب الإدخال)، مفصولة بـ ,
  2. عدد المدخلات التي تم إسقاطها (التي لم يمكن تحليلها)
  3. مجموع الأعداد الصحيحة التي تم تحليلها

للمدخل 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)؛ طباعة العناصر مدمجة، عدد العناصر المحذوفة، والمجموع
quiz iconاختبر نفسك

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

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