有没有一种很好的方法来计算ruby中范围元素的总和

时间:2016-11-20 18:46:27

标签: ruby range

计算范围总和的好方法是什么?

输入

4..10

输出

4 + 5 + 6 + 7 + 8 + 9 + 10 = 49

5 个答案:

答案 0 :(得分:7)

您可以在Range对象上使用Enumerable方法,在这种情况下使用Enumerable#inject

(4..10).inject(:+)
 #=> 49 

现在,在Ruby 2.4.0中,您可以使用Enumerable#sum

(4..10).sum
#=> 49 

答案 1 :(得分:6)

我假设要计算的和的范围是整数范围。

def range_sum(rng)
  rng.size * (2 * rng.first + rng.size - 1) / 2
end

range_sum(4..10)   #=> 49
range_sum(4...10)  #=> 39
range_sum(-10..10) #=>  0

通过定义

last = rng.first + rng.size - 1

表达式

rng.size * (2 * rng.first + rng.size - 1) / 2

缩减为

rng.size * (rng.first + last) / 2

这只是算术级数值之和的公式。请注意(4..10).size #=> 7(4...10).size #=> 6

答案 2 :(得分:3)

使用Enumerable#reduce

range.reduce(0, :+)

请注意,如果要折叠的范围为空,则需要0作为标识值,否则您将获得nil

答案 3 :(得分:2)

YES! :)

(1..5).to_a.inject(:+)

视觉表示

(1..5).to_a.join("+")+"="+(1..5).inject(:+).to_s

答案 4 :(得分:2)

(4..10).to_a * " + " + " = 15" 
#=> 4 + 5 + 6 + 7 + 8 + 9 + 10 = 15

:)