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

flatMap

جزء من قسم المنطق والتدفق في رحلة Swift على Coddy. الدرس 29 من 56.

تُستخدم flatMap في الحالة التي ينتج فيها كل عنصر عدة نتائج. تُرجع الـ closure مصفوفة؛ وتقوم flatMap بدمجها جميعاً في مصفوفة مسطحة واحدة.

let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all)                       // [1, 2, 3, 4, 5, 6]

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

let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs)                     // [1, 1, 2, 4, 3, 9]

قارن مع map: سينتج عن ذلك [[Int]]، وهي مصفوفة من المصفوفات الصغيرة، والتي ستحتاج إلى خطوة أخرى لتبسيطها. flatMap يدمج هاتين الخطوتين في خطوة واحدة.

challenge icon

التحدي

سهل

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

  1. قائمة من الأعداد الصحيحة مفصولة بفاصلة، وهي nums
  2. قائمة من الأعداد الصحيحة مفصولة بفاصلة، وهي repeats (بنفس طول nums)

لكل i، كرر nums[i] بالضبط repeats[i] من المرات. اطبع المصفوفة المسطحة الناتجة، مدمجة بـ ,. استخدم flatMap.

للمدخلات 5,7,2 في السطر 1 و 3,1,2 في السطر 2، المخرجات هي 5,5,5,7,2,2.

جرّب بنفسك

let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let repeats = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: استخدم flatMap لكل (num, repeat) لتحويلها إلى Array(repeating:count:)؛ ثم ادمجها باستخدام ","
quiz iconاختبر نفسك

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

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

تدرّب بنفسك: Playground لـ Swift