2016-10-07 71 views
0

我有像這樣一個數組的數組的數組添加量...如何從陣列

a1 = [[9, -1811.4], [8, 959.86], [7, -385], [6, -1731.39], [5, 806.78], [4, 2191.65]] 

我需要從整個陣列的第2個項目(金額)的平均值。

所以添加-1811.4,959.86,-385,-1731.39,806.78由計數分(6)

我已經試過......

a1.inject{ |month, amount| amount }.to_f/a1.size 

這是不對的,我不能看我需要做的

回答

3
a1.map(&:last).inject(:+)/a1.size.to_f 
#=> 5.0833333333332575 

步驟:

# 1. select last elements 
a1.map(&:last) 
#=> [-1811.4, 959.86, -385, -1731.39, 806.78, 2191.65] 
# 2. sum them up 
a1.map(&:last).inject(:+) 
#=> 30.499999999999545 
# 3. divide by the size of a1 
a1.map(&:last).inject(:+)/a1.size.to_f 
#5.0833333333332575 
+0

是否增加時,這種方法把消極到積極? – SupremeA

+0

@SupremeA它沒有。它只是總結它。你需要總結絕對值嗎? –

+0

是的,我現在看到謝謝! – SupremeA

2

只要通過a1就足夠了。

a1.reduce(0) { |tot, (_,b)| tot + b }/a1.size.to_f 
    #=> 5.0833333333332575 

.to_f允許a1只包含整數值。

步驟:

tot = a1.reduce(0) { |tot, (_,b)| tot + b } 
    #=> 30.499999999999545 
n = a1.size.to_f 
    #=> 6.0 
tot/n 
    #=> 5.0833333333332575 
+0

只是另一種選擇,我們也可以使用'.fdiv(a1.size)'而不是'/ a1.size.to_f'。 –

+0

@ sagarpandya82,我從來沒有聽說過[Numeric#fdiv](https://ruby-doc.org/core-2.2.2/Fixnum.html#method-i-fdiv)。謝謝你的提示。 –

+0

也正在考慮添加一個'inject'選項,但它需要輸入更多字母才能輸入我的原始文字,所以我放棄了它:) –