التابع Enumerable.reduce في روبي

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

يجمع التابع reduce جميع عناصر الكائن القابل للتعداد الذي استدعي معه عبر تطبيق عملية ثنائية تُحدَّد بوساطة كتلة أو رمز يسمي تابعًا أو معاملًا.

التابعان inject و reduce هما وجهين لعملة واحدة؛ أي كل منها اسم بديل للآخر.

البنية العامة

reduce(initial, sym)  obj
reduce(sym)  obj
reduce(initial) { |memo, obj| block }  obj
reduce { |memo, obj| block }  obj

إن حُدَّدَت كتلة مع هذا التابع، فسيُمرَّر لكل عنصر من عناصر الكائن القابل للتعداد المعطى قيمة تراكمية (memo) والعنصر نفسه. إن حُدَّدَ رمز عوضًا عن ذلك، فسيُمرَّر كل عنصر في المجموعة إلى التابع memoالمسمى. في كلا الحالتين، يصبح الناتج القيمة الجديدة من أجل memo. في نهاية عملية التكرار، تكون القيمة memo النهائية هي القيمة التي يعيدها التابع.

المعاملات

initial

قيمة بدائية يُبدَأ بها العملية. إن لم تُحدِّد القيمة initial البدائية من أجل memo صراحةً، فسيُستعمَل آنذاك العنصر الأول في المجموعة على أنَّه القيمة البدائية من أجل memo.

sym

رمز يمثِّل اسم تابعٍ أو معاملٍ يراد استعماله لتنفيذ العملية الثنائية لجمع جميع عناصر الكائن القابل للتعداد المعطى.

القيمة المعادة

تعاد القيمة التراكمية النهائية الناتجة عن تجميع عناصر الكائن القابل للتعداد المعطى.

أمثلة

مثال على استعمال التابع reduce:

# Sum some numbers
(5..10).reduce(:+)                             #=> 45
# Same using a block and inject
(5..10).inject { |sum, n| sum + n }            #=> 45
# Multiply some numbers
(5..10).reduce(1, :*)                          #=> 151200
# Same using a block
(5..10).inject(1) { |product, n| product * n } #=> 151200
# find the longest word
longest = %w{ cat sheep bear }.inject do |memo, word|
   memo.length > word.length ? memo : word
end
longest                                        #=> "sheep"

انظر أيضًا

  • التابع chunk: يُمرِّر كل عنصر من عناصر المجموعة التي استدعيت معه إلى الكتلة المعطاة ثمَّ يُقطِّعها إلى أجزاء (قطع صغيرة) بحسب القيمة المعادة من الكتلة.
  • التابع group_by: يجمِّع عناصر الكائن القابل للتعداد الذي استدعي معه في مجموعات بحسب النتيجة المقابلة لكل عنصر التي تعيدها الكتلة المعطاة بعد تمريره إليها.
  • التابع partition: يعيد مصفوفتين تحتوي الأولى على عناصر الكائن القابل للتعداد المحققة للكتلة المعطاة (التي أعادت عند تمريرها إليها قيمة صحيحة) وتحتوي الأخرى على العناصر المتبقية.

مصادر