我有一个整数数组。
例如:
array = [123,321,12389]
有什么好方法能求出它们的和吗?
我知道
sum = 0
array.each { |a| sum+=a }
是可行的。
我有一个整数数组。
例如:
array = [123,321,12389]
有什么好方法能求出它们的和吗?
我知道
sum = 0
array.each { |a| sum+=a }
是可行的。
当前回答
对于nil值的数组,我们可以压缩,然后注入和 除
a = [1,2,3,4,5,12,23.45,nil,23,nil]
puts a.compact.inject(:+)
其他回答
试试这个:
array.inject(0){ |sum, x| sum + x }
参见Ruby的可枚举文档
(注意:需要0基本情况,以便在空数组上返回0而不是nil)
对于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 1.8.7的方式如下:
array.inject(0, &:+)
也允许[1,2]。Sum {|x| x * 2} == 6:
# http://madeofcode.com/posts/74-ruby-core-extension-array-sum
class Array
def sum(method = nil, &block)
if block_given?
raise ArgumentError, "You cannot pass a block and a method!" if method
inject(0) { |sum, i| sum + yield(i) }
elsif method
inject(0) { |sum, i| sum + i.send(method) }
else
inject(0) { |sum, i| sum + i }
end
end
end
你也可以用简单的方法做这件事
def sum(numbers)
return 0 if numbers.length < 1
result = 0
numbers.each { |num| result += num }
result
end