2014-01-18 56 views
0

嗨,我發現平均 這就是我要做的的Rails得到一個錯誤「/」未定義的方法

我的一套,我正在從數據庫中基於USER_ID服用變量和COMPANY_ID的變量我不能再有加,因爲我需要在我的節目頁面顯示單個參數,我也想顯示他們的平均
所以我嘗試做如下

@r1=company_rating.collect(&:r1) 
    @r2=company_rating.collect(&:r2) 
    @r3=company_rating.collect(&:r3) 
    @r4=company_rating.collect(&:r4) 

所以我做它像

arr = [@r1,@r2,@r3,®r4] 
@totalaverage= arr.sum.compact /arr.size 
My array sample looks like [10,20,30,nil],[nil,nil,nil,nil],[30,40,50,60] 

,如果我有陣列中的所有零,那麼它應該顯示爲nil 但我得到一個錯誤未定義的方法'/」爲#和爲什麼我做的緊湊是因爲我有零值的總和的

所以請幫忙怎麼做到這一點。

+0

任何人都可以告訴我爲什麼爲我投票。 – user3144005

回答

0

最簡單的方法,如果你使用Rails這樣做:

@totalaverage = a.flatten.compact.sum.to_f/a.flatten.compact.size if a.flatten.compact.present? 

這將分配給@totalaverage結果或nil的情況下,所有值都nil

+0

首先非常感謝您的幫助我已經解決了我的問題,並且可以給我一些正面的投票,因爲我的賬戶被封鎖了。我的問題對其他人來說可能很簡單,但作爲一個新的獨立學習者,我很難理解。所以你可以給我投票。 – user3144005

1

做如下,這應該工作:

@totalaverage= arr.flat_map(&:compact).inject(:+) /arr.size.to_f 

其實@totalaverage是數組的數組。其中每個內部元素(數組)@totalaverage也可以具有nil值(如您所示)。所以你需要從@totalaverage的內部數組中刪除那些nil條目。而arr.map(&:compact)也會做同樣的工作。

1

首先,您將arr定義爲數組數組。 @ R1@ R2等都是陣列,什麼[@r1, @r2, ...]不只是把它們組合起來在另一個陣列。你可能想合併他們,而不是將它們包含在另一個數組:

arr = @r1 + @r2 + @r3 + @r4 

其次,你應該叫arr.compact,再總結的內容了。另外,我不確定sum方法。我會用reduce(&:+)代替。因此,要回答你的問題,「/」失敗,因爲compact返回陣列,和你想的劃分陣列一些。這看起來更好:

arr = @r1 + @r2 + @r3 + @r4 
@totalaverage = arr.compact.reduce(&:+)/arr.size 

什麼Array#reduce(&:+)確實是應用陣列成員之間的+操作和返回值(不是數組)。

編輯:arr.sum確實工作,如果你正在使用Ruby on Rails。否則請改用arr.reduce(&:+)

+0

謝謝Atlast我解決了。如果我有一個數組[3,nil,4,nil,5],那麼可以告訴如何找到不包含nil的數組的大小,那麼我的數組大小應該是3我怎麼能得到它。 – user3144005

+1

@ user3144005'[3,nil,4,nil,5] .compact.size'將起作用。 –

+0

所以在你的例子中它會是''/ arr.compact.size''。 – lipanski

相關問題