2013-07-05 118 views
4

我有三個Ruby的數組:平均幾個紅寶石陣列

[1, 2, 3, 4] 
[2, 3, 4, 5] 
[3, 4, 5, 6] 

我怎麼能採取所有三個數字的平均值0位置,再位置1等,並將其存儲在一個名爲「新陣平均'?

回答

7
a = [1, 2, 3, 4] 
b = [2, 3, 4, 5] 
c = [3, 4, 5, 6] 

a.zip(b,c) 
    # [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]] 
.map {|array| array.reduce(:+)/array.size } 
    # => [ 2,3,4,5] 
+4

這是很好的。如果數組的大小不同,請小心使用zip,因爲它將對結果應用nil,在這種情況下會拋出異常 – NicoSantangelo

+1

有兩點值得一提。首先,你'[a,b,c] .transpose'是'a.zip(b,c)'的不錯選擇。其次,你只是在這個例子中處理整數,如果除法沒有餘數,分割就不能工作。我會去'[a,b,c] .transpose.map {| ary | ary.inject(:+)/ ary.size}'。 –

0

試試這個:

arr = ([1, 2, 3, 4] + [3, 4, 5, 6] + [2, 3, 4, 5]) 
arr.inject(0.0) { |sum, el| sum + el }/arr.size 

級聯可以通過多種方式來實現,取決於你如何存儲陣列。

作爲一個語法糖,你可以像這樣做太:

arr.inject(:+).to_f/arr.size