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

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!"
challenge icon

التحدي

سهل

اقرأ سطرًا واحدًا من المدخلات: قائمة من الأعداد الصحيحة مفصولة بفاصلة. باستخدام reduce لكل منها، اطبع ثلاثة أسطر:

  1. المجموع
  2. حاصل الضرب
  3. القيمة العظمى (استخدم 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
quiz iconاختبر نفسك

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

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