我有一个整数数组。

例如:

array = [123,321,12389]

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

我知道

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

是可行的。


当前回答

试试这个:

array.inject(0){ |sum, x| sum + x }

参见Ruby的可枚举文档

(注意:需要0基本情况,以便在空数组上返回0而不是nil)

其他回答

只是为了多样性,如果你的数组不是一个数字数组,而是一个具有数字属性的对象数组(例如amount),你也可以这样做:

array.inject(0){|sum,x| sum + x.amount}

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

require 'activesupport'
array.sum

如果你想打高尔夫,你可以

eval [123,321,12389]*?+

这将创建一个字符串“123+321+12389”,然后使用函数eval进行求和。这只是为了打高尔夫球,你不应该在正确的代码中使用它。

你也可以用简单的方法做这件事

def sum(numbers)
  return 0 if numbers.length < 1
  result = 0
  numbers.each { |num| result += num }
  result
end

对于nil值的数组,我们可以压缩,然后注入和 除

a = [1,2,3,4,5,12,23.45,nil,23,nil]
puts a.compact.inject(:+)