Сделать мою функцию вычислить среднее значение массива Swift

Я хочу, чтобы моя функция вычисляла среднее значение моего массива двойного типа. Массив называется "голоса". На данный момент у меня 10 номеров.

когда я называю average function чтобы получить среднее число голосов массива, это не работает.

вот мой код:

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]

Как я могу назвать среднее здесь, чтобы получить среднее?

2 ответов


вы должны использовать метод reduce () для суммирования массива следующим образом:

Xcode 10 * Swift 4.2

extension Collection where Element: Numeric {
    /// Returns the total sum of all elements in the array
    var total: Element { return reduce(0, +) }
}

extension Collection where Element: BinaryInteger {
    /// Returns the average of all elements in the array
    var average: Double {
        return isEmpty ? 0 : Double(Int(total)) / Double(count)
    }
}

extension Collection where Element: BinaryFloatingPoint {
    /// 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"

Если вам нужно работать с Decimal типы общая сумма она уже покрыта Numeric свойство расширения протокола, поэтому вам нужно только реализовать среднее свойство:

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

у вас есть некоторые ошибки в коде:

//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)