我有一个整数数组。
例如:
array = [123,321,12389]
有什么好方法能求出它们的和吗?
我知道
sum = 0
array.each { |a| sum+=a }
是可行的。
我有一个整数数组。
例如:
array = [123,321,12389]
有什么好方法能求出它们的和吗?
我知道
sum = 0
array.each { |a| sum+=a }
是可行的。
当前回答
Ruby 2.4+ / Rails -数组。和即[1,2,3]。Sum # =>
Ruby pre 2.4 - array.inject(:+)或array.reduce(:+)
*注意:#sum方法是2.4中用于枚举的新添加,所以你现在可以使用数组了。sum是纯ruby,而不仅仅是Rails。
其他回答
也允许[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
对于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
你可以像这样使用。map和。sum:
array.map { |e| e }.sum
或者(只是为了比较),如果你安装了Rails(实际上只有ActiveSupport):
require 'activesupport'
array.sum
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