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

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

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

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

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

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

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

المعاملات

initial

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

sym

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

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

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

أمثلة

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

# جمع بعض الأعداد
(5..10).reduce(:+)                             #=> 45
# تنفيذ الوظيفة نفسها ولكن باستعمال كتلة
(5..10).inject { |sum, n| sum + n }            #=> 45
# ضرب بعض الأعداد
(5..10).reduce(1, :*)                          #=> 151200
# أداء الأمر نفسه ولكن باستعمال كتلة
(5..10).inject(1) { |product, n| product * n } #=> 151200
# إيجاد أطول كلمة
longest = %w{ cat sheep bear }.inject do |memo, word|
   memo.length > word.length ? memo : word
end
longest                                        #=> "sheep"

انظر أيضًا

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

مصادر