Reduce
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 25 من 56.
تقوم reduce بتقليص مصفوفة كاملة إلى قيمة واحدة. إنها الطريقة التي يمكنك من خلالها الجمع، أو الضرب، أو العثور على قيمة قصوى، أو بناء سلسلة نصية أو مصفوفة جديدة من عناصر متعددة.
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total) // 10المعامل الأول هو المراكم الأولي. تستقبل الدالة المنغلقة (closure) المراكم الحالي والعنصر التالي، وتعيد المراكم الجديد. القيمة النهائية للمراكم هي النتيجة.
بالنسبة للعمليات الحسابية، توفر لك Swift اختصاراً يعتمد على الرموز:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24لا يجب أن تُرجع reduce رقماً. يمكن أن يكون المجمع (accumulator) من أي نوع، أنت من يقرر:
let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence) // "hi!there!"التحدي
سهلاقرأ سطرًا واحدًا من المدخلات: قائمة من الأعداد الصحيحة مفصولة بفاصلة. باستخدام reduce لكل منها، اطبع ثلاثة أسطر:
- المجموع
- حاصل الضرب
- القيمة العظمى (استخدم closure يعيد الأكبر بين الوسيطين، لا تستدعي
.max())
افترض وجود عنصر واحد على الأقل. بالنسبة للقيمة العظمى، يمكنك استخدام nums[0] كمراكم أولي وقم بعمل reduce لبقية المصفوفة.
للمدخلات 3,7,2,8,4، المخرجات هي:
24
1344
8ورقة مرجعية
تقوم الدالة reduce بتقليص مصفوفة إلى قيمة واحدة باستخدام مجمع (accumulator) أولي وإغلاق (closure):
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n } // 10اختصار للعوامل الحسابية:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24يمكن أن يكون المجمع من أي نوع:
["hi", "there"].reduce("") { $0 + $1 + "!" } // "hi!there!"لإيجاد القيمة القصوى باستخدام reduce، استخدم العنصر الأول كقيمة أولية:
let maxVal = nums.dropFirst().reduce(nums[0]) { $0 > $1 ? $0 : $1 }جرّب بنفسك
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: المجموع، والضرب، والحد الأقصى عبر reduce
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلمات