2013-04-04 236 views
0

我想用ruby編寫一個小函數,該函數從用戶獲取一個數組,然後總結數組中的數據。我已經寫它作爲紅寶石數組輸入

def sum(a) 
     total = 0 
     a.collect { |a| a.to_i + total } 
    end 

然後,該函數貫穿一個rspec的,其通過最初供給到它空白陣列測試它。這這將導致以下錯誤

sum computes the sum of an empty array 
    Failure/Error: sum([]).should == 0 
    expected: 0 
     got: [] (using ==) 

因此,它告訴我,當它在,喂空數組它應該得到0,而是其得到陣列。我試圖把一個if語句寫成

​​

,但它給了我一個錯誤說

syntax error, unexpected '}', expecting => (SyntaxError) 

我究竟做錯了什麼?

+0

的http://stackoverflow.com/questions/1538789/how-to-sum-array-members-in-ruby?rq=1 – 2013-04-04 17:31:25

回答

2

你不應該使用這個map/collectreduce/inject是適當的方法

def sum(a) 
    a.reduce(:+) 
    # or full form 
    # a.reduce {|memo, el| memo + el } 

    # or, if your elements can be strings 
    # a.map(&:to_i).reduce(:+) 
end 
+0

對於像'a = [「123」,「23」,「345」,「678」]''這樣的數組,這是失敗的。我認爲Mike F特別使用'.to_i'。 – 2013-04-04 17:34:28

+0

@JoeFrambach:謝謝,錯過了。 – 2013-04-04 17:35:44

+0

「a.map(&:to_i).reduce(:+)」如何在大型數組上使用內存使用?它會使內存使用量翻倍嗎,還是Ruby能夠更聰明地做到這一點? – 2013-04-04 17:37:52