2016-11-20 30 views
2

什么是计算范围总和的好方法?有没有一种很好的方法来计算红宝石范围元素的总和

输入

4..10 

输出

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

@lurker 49当然=))错字 –

+0

为什么疯狂地急于选择一个答案?快速选择可能会阻止其他答案,并使那些仍在准备答案的人短路。没有急于。许多人在这里等待至少几个小时。 –

+0

@CarySwoveland当两只巨大的狗想走在那里时没有时间去纠正错误! –

回答

5

您可以使用Enumerable方法的范围对象,在这种情况下使用Enumerable#inject:现在

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

,用Ruby 2.4.0你可以使用Enumerable#sum

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

简短而好,谢谢! –

+0

由于这是选定的答案,因此您可以将0添加为标识值,否则您将无空值范围。 – tokland

2

是的! :)

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

而对于视觉表示

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

'to_a'都是不必要的。 – tokland

+0

哦,很高兴知道谢谢你,我是新的红宝石只是,我有同样的问题之前,作为初级红宝石开发我做了,如在文档:) –

3

使用Enumerable#reduce

range.reduce(0, :+) 

请注意,你需要0作为标识值的情况下折的范围内是空的,否则你会得到nil

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

:)

+0

错字更正 –

+0

但是答案是钢酷=) –

4
rng = 4..10 

rng.size * (rng.first + rng.last)/2 
    #=> 49 

这仅仅是一个等差级数的值的总和的公式。另一个例子:

arr = (1..10).step(3).to_a 
    #=> [1, 4, 7, 10] 

arr.size * (arr.first + arr.last)/2 
    #=> 22 
+0

学校数学很酷:)。伟大的方法! – fl00r

+2

我会去声明一个具有左/右边界的方法,而不用混淆范围。 – fl00r