计算范围总和的好方法是什么?
输入
4..10
输出
4 + 5 + 6 + 7 + 8 + 9 + 10 = 49
答案 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)
答案 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
:)