Ruby 4.0 リファレンスマニュアル

instance method Array#sum

sum(init=0) -> objectRuby 2.4.0 から[permalink][rdoc][edit]
sum(init=0) {|e| expr } -> object

要素の合計を返します。例えば [e1, e2, e3].sum は init + e1 + e2 + e3 を返します。

ブロックが与えられた場合、加算する前に各要素にブロックが適用されます。

配列が空の場合、initを返します。

p [].sum                           # => 0
p [].sum(0.0)                      # => 0.0
p [1, 2, 3].sum                    # => 6
p [3, 5.5].sum                     # => 8.5
p [2.5, 3.0].sum(0.0) {|e| e * e } # => 15.25
[Object.new].sum                   # ~> TypeError

配列の平均値は以下のように求められます。

mean = ary.sum(0.0) / ary.length

init 引数を明示的に指名すると数値以外のオブジェクトにも使えます。

p ["a", "b", "c"].sum("")          # => "abc"
p [[1], [[2]], [3]].sum([])        # => [1, [2], 3]

しかし、文字列の配列や配列の配列の場合 Array#joinArray#flatten の方が Array#sum よりも高速です。

p ["a", "b", "c"].join             # => "abc"
p [[1], [[2]], [3]].flatten(1)     # => [1, [2], 3]

"+" メソッドが再定義されている場合、Array#sum は再定義を無視することがあります(例えば Integer#+)。

[SEE_ALSO] Enumerable#sum