Haciendo que mi función calcule el promedio de la matriz Swift

Quiero que mi función calcule el promedio de mi matriz de tipo doble. La matriz se llama “votos”. Por ahora, tengo 10 números.

Cuando llamo a la average function para obtener el promedio de los votos de la matriz, no funciona.

Aquí está mi código:

 var votes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] func average(nums: Double...) -> Double { var total = 0.0 for vote in votes { total += vote } let votesTotal = Double(votes.count) var average = total/votesTotal return average } average[votes] 

¿Cómo llamo el promedio aquí para obtener el promedio?

Debe usar el método de reducir () para sumr su matriz de la siguiente manera:

Xcode 9 • Swift 4

 extension Array where Element: Numeric { /// Returns the total sum of all elements in the array var total: Element { return reduce(0, +) } } extension Array where Element: BinaryInteger { /// Returns the average of all elements in the array var average: Double { return isEmpty ? 0 : Double(Int(total)) / Double(count) } } extension Array where Element: FloatingPoint { /// Returns the average of all elements in the array var average: Element { return isEmpty ? 0 : total / Element(count) } } 

 let votes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let votesTotal = votes.total // 55 let votesAverage = votes.average // "5.5" 

Si necesita trabajar con tipos Decimal la sum total ya está cubierta por la propiedad de extensión de protocolo Numeric , por lo que solo debe implementar la propiedad promedio:

 extension Array where Element == Decimal { var average: Decimal { return isEmpty ? 0 : total / Decimal(count) } } 

Usted tiene algunos errores en su código:

 //You have to set the array-type to Double. Because otherwise Swift thinks that you need an Int-array var votes:[Double] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] func average(nums: [Double]) -> Double { var total = 0.0 //use the parameter-array instead of the global variable votes for vote in nums{ total += Double(vote) } let votesTotal = Double(nums.count) var average = total/votesTotal return average } var theAverage = average(votes) 
    Intereting Posts