flatMap والتسلسل
سطّح المجموعات المتداخلة وسلّسل التحويلات.
flatMap والتسلسل درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
وجهان لـ flatMap
تُسطّح flatMap على التسلسل مستوى واحدًا من التداخل. فهي تطبّق إغلاقًا يُرجع تسلسلًا لكل عنصر، ثم تضمّ جميع هذه التسلسلات في مصفوفة مسطّحة واحدة.
تسطيح المصفوفات المتداخلة
تحويل مصفوفة من المصفوفات إلى مصفوفة واحدة:
let nested = [[1, 2], [3, 4], [5]]
let flat = nested.flatMap { $0 }
print(flat) // [1, 2, 3, 4, 5]استخدام flatMap لإنتاج تسلسلات
يمكن أن يتوسع كل عنصر إلى عدة عناصر:
let nums = [1, 2, 3]
let expanded = nums.flatMap { [$0, $0 * 10] }
print(expanded) // [1, 10, 2, 20, 3, 30]إنشاء كل التركيبات
تُعد flatMap مفيدة للجداءات الديكارتية:
let suits = ["Hearts", "Spades"]
let ranks = ["A", "K"]
let deck = suits.flatMap { suit in ranks.map { "\($0) of \(suit)" } }
print(deck) // ["A of Hearts", "K of Hearts", "A of Spades", "K of Spades"]flatMap في مقابل compactMap
تاريخيًا، كانت flatMap تفك تغليف القيم الاختيارية أيضًا، لكن هذا الدور انتقل إلى compactMap. حاليًا:
flatMap— تسطيح التسلسلات المتداخلةcompactMap— حذفnilمن النتائج الاختيارية
تسطيح الكلمات إلى محارف
توسيع كل سلسلة نصية إلى محارفها:
let words = ["hi", "yo"]
let chars = words.flatMap { Array($0) }
print(chars) // ["h", "i", "y", "o"]ضم النتائج الفرعية
جمع العناصر من كائنات النموذج المتداخلة:
struct Team { let members: [String] }
let teams = [Team(members: ["Ann", "Bo"]), Team(members: ["Cy"])]
let all = teams.flatMap { $0.members }
print(all) // ["Ann", "Bo", "Cy"]تسلسل التحويلات
تظهر القوة الحقيقية عند التسلسل: تُقرأ map وfilter وflatMap وreduce من الأعلى إلى الأسفل باعتبارها مسارًا لمعالجة البيانات. وتنتج كل خطوة تسلسلًا جديدًا للخطوة التالية.
مسار معالجة كامل
التصفية، ثم التسطيح، ثم التحويل، ثم الجمع:
let groups = [[1, 2, 3], [4, 5], [6]]
let result = groups
.flatMap { $0 }
.filter { $0 % 2 == 0 }
.map { $0 * $0 }
.reduce(0, +)
print(result) // 4 + 16 + 36 = 56استخدام flatMap ثم compactMap
سطّحوا أولًا، ثم احتفظوا بالقيم القابلة للتحليل فقط:
let rows = [["1", "x"], ["3", "4"]]
let nums = rows
.flatMap { $0 }
.compactMap { Int($0) }
print(nums) // [1, 3, 4]الحفاظ على وضوح التسلسلات
ضعوا كل خطوة في سطر مستقل، وسمّوا النتائج الوسيطة عندما يطول التسلسل. سهولة القراءة أهم من ضغط كل شيء في تعبير واحد.
let names = ["ann", "BO", "cy"]
let titled = names
.map { $0.lowercased() }
.map { $0.capitalized }
.sorted()
print(titled) // ["Ann", "Bo", "Cy"]اختبار سريع
ماذا تُرجع [[1, 2], [3]].flatMap { $0 }؟
مراجعة
لقد تعلمتم التسطيح والتسلسل:
- تُسطّح
flatMapمستوى واحدًا من التسلسلات المتداخلة - استخدموا
compactMap، وليس flatMap، لحذف القيم الاختيارية - سلسلوا
filterوmapوflatMapوreduceفي مسارات واضحة لمعالجة البيانات - يساعد وضع كل خطوة في سطر مستقل على توضيح التسلسلات الطويلة
اكتملت الدورة! التالي: التسلسلات الكسولة.
الأسئلة الشائعة
هل درس «flatMap والتسلسل» مجاني؟
نعم — نص درس «flatMap والتسلسل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «flatMap والتسلسل»؟
سطّح المجموعات المتداخلة وسلّسل التحويلات. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «flatMap والتسلسل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- map و compactMap
- filter والمسندات
- reduce و reduce(into:)
- flatMap والتسلسل