4
我有三個Ruby的數組:平均幾個紅寶石陣列
[1, 2, 3, 4]
[2, 3, 4, 5]
[3, 4, 5, 6]
我怎麼能採取所有三個數字的平均值0
位置,再位置1
等,並將其存儲在一個名爲「新陣平均'?
我有三個Ruby的數組:平均幾個紅寶石陣列
[1, 2, 3, 4]
[2, 3, 4, 5]
[3, 4, 5, 6]
我怎麼能採取所有三個數字的平均值0
位置,再位置1
等,並將其存儲在一個名爲「新陣平均'?
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]
試試這個:
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
這是很好的。如果數組的大小不同,請小心使用zip,因爲它將對結果應用nil,在這種情況下會拋出異常 – NicoSantangelo
有兩點值得一提。首先,你'[a,b,c] .transpose'是'a.zip(b,c)'的不錯選擇。其次,你只是在這個例子中處理整數,如果除法沒有餘數,分割就不能工作。我會去'[a,b,c] .transpose.map {| ary | ary.inject(:+)/ ary.size}'。 –