2016-07-06 115 views
1

想我已經在這裏我要計算使用高階函數reduce()數字的平均代碼:理解減少()

var ofAvg = [1,2,3,4,5] 

var doAvg = ofAvg.reduce(0) { $0 + $1 } 

doAvg/ofAvg.count //This gives me the correct answer which in this case is 3. 

但是當我做:

var ofAvg = [1,2,3,4,5] 

var doAvg = ofAvg.reduce(0) { ($0 + $1)/ofAvg.count } 

我得到輸出爲1。我在做什麼?我對reduce()的理解是不是它實際上是什麼? reduce()方法之外的doAvg/ofAvg.count是否可以獲得平均值?

+1

在每次迭代中,您將被計數除。 –

+1

您只需要除以元素數量一次。 – itskoBits

回答

4

你需要做的劃分僅一次,全部相加後完成:

var ofAvg = [1,2,3,4,5] 

var doAvg = ofAvg.reduce(0) { $0 + $1 }/ofAvg.count 

你甚至不需要在這種情況下單獨關閉,因爲+已具有您正在尋找同類型對於((Int, Int) -> Int),所以你可以直接使用它:

var doAvg = ofAvg.reduce(0, combine: +)/ofAvg.count 

PS請使用更好的名字。變量應該是名詞(或名詞短語),功能應該是動詞(或動詞短語)。

+0

這樣做。我完全忘記了reduce()對數組的每個元素執行操作。非常感謝。 :) – Dershowitz123

+0

至少需要9分鐘。我會盡我所能。再次感謝! :) – Dershowitz123

+0

OK :)請參閱我的編輯 – Alexander