Dershowitz123 Dershowitz123 - 4 months ago 13
Swift Question

Understanding reduce()

Suppose I've a code where I want to calculate the average of the numbers using the higher order function

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.


But when I do:

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

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


I get the output as
1
. What wrong I'm I doing? Is my understanding of
reduce()
not what it actually is? Is it possible to get the average without having to do
doAvg/ofAvg.count
outside the
reduce()
method?

Answer

You need to do the division only once, after all summing is done:

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

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

You don't even need seperate closure in this case, since + already has the same type that you're looking for ((Int, Int) -> Int), so you can just use it directly:

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

P.S. Please use better names. Variables should be nouns (or noun phrases), and functions should be verbs (or verb phrases).

Comments