2016-11-20 28 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