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}'。 –