我有一个整数数组。

例如:

array = [123,321,12389]

有什么好方法能求出它们的和吗?

我知道

sum = 0
array.each { |a| sum+=a }

是可行的。


当前回答

对于Ruby >=2.4.0,你可以使用sum from Enumerables。

[1, 2, 3, 4].sum

mokeypatch基类是很危险的。如果你喜欢危险并且使用旧版本的Ruby,你可以在Array类中添加#sum:

class Array
  def sum
    inject(0) { |sum, x| sum + x }
  end
end

其他回答

Ruby 2.4.0发布了,它有一个Enumerable#sum方法。所以你可以

array.sum

文档中的例子:

{ 1 => 10, 2 => 20 }.sum {|k, v| k * v }  #=> 50
(1..10).sum                               #=> 55
(1..10).sum {|v| v * 2 }                  #=> 110

或者(只是为了比较),如果你安装了Rails(实际上只有ActiveSupport):

require 'activesupport'
array.sum

对于ruby >= 2.4,你可以使用sum:

array.sum

对于ruby < 2.4,你可以使用inject:

array.inject(0, :+)

注意:需要0基本大小写,否则空数组将返回nil:

> [].inject(:+)
nil
> [].inject(0, :+)
0

Ruby 2.4+ / Rails -数组。和即[1,2,3]。Sum # =>

Ruby pre 2.4 - array.inject(:+)或array.reduce(:+)

*注意:#sum方法是2.4中用于枚举的新添加,所以你现在可以使用数组了。sum是纯ruby,而不仅仅是Rails。

Ruby 1.8.7的方式如下:

array.inject(0, &:+)