【发布时间】:2017-04-30 06:57:59
【问题描述】:
我遇到了一个问题,我不知道如何找到数组的平均值。以下是我的问题:
- 如何将数组中的所有数字相加?
- 如何找到我的数组中有多少索引?
- 如何获取这些信息并从我的数组中收集平均值?
虽然所有这些看起来都很简单且相当初级,但我不确定如何做到这一点。有什么帮助吗?
【问题讨论】:
我遇到了一个问题,我不知道如何找到数组的平均值。以下是我的问题:
虽然所有这些看起来都很简单且相当初级,但我不确定如何做到这一点。有什么帮助吗?
【问题讨论】:
例如,我将我的数组定义为intArray,并使用[10, 15, 5, 7, 13] 的值创建我们的最终数组:
var intArray = [10, 15, 5, 7, 13]
现在让我们按顺序回答每个问题:
- 如何将数组中的所有数字相加?
为了将数组中的所有数字相加,您需要使用数组中集成的reduce() 函数。它看起来像这样:
intArray.reduce(0, +)
此行将获取您的数组,在本例中为 intArray,并从索引号 0 开始减少它,并添加以下所有连续数字。 然而,在我们的例子中,我们需要将此值分配给一个变量,以便稍后在平均函数中使用它。看起来是这样的:
let sumArray = intArray.reduce(0, +)
- 如何找到我的数组中有多少索引?
在我们的例子中,我们需要索引的总数来计算除以什么来得到我们的最终平均值。这是通过利用数组的count() 属性来完成的。看起来像这样:
intArray.count
现在我们有了总索引计数,我们可以找出下一个问题的答案。
- 如何获取这些信息并从我的数组中收集平均值?
我们可以从问题 1 和问题 2 中获取信息并将它们组合在一起以获得我们的数组的平均值。它看起来像这样:
let avgArrayValue = sumArray / intArray.count
整个代码如下所示:
let sumArray = intArray.reduce(0, +)
let avgArrayValue = sumArray / intArray.count
【讨论】:
let avgArrayValue = Double(sumArray) / Double(intArray.count)
-nan。
这是一个扩展,它根据@bwcooley 的回答计算整数和浮点类型(即Int、Float、Double 等)的平均值
extension Array where Element: BinaryInteger {
/// The average value of all the items in the array
var average: Double {
if self.isEmpty {
return 0.0
} else {
let sum = self.reduce(0, +)
return Double(sum) / Double(self.count)
}
}
}
extension Array where Element: BinaryFloatingPoint {
/// The average value of all the items in the array
var average: Double {
if self.isEmpty {
return 0.0
} else {
let sum = self.reduce(0, +)
return Double(sum) / Double(self.count)
}
}
}
用法:
let array = [1,2,3]
array.average // 2.0
【讨论】:
为了更快的计算,您可以使用 Accelerate 框架
import Accelerate
let avg = vDSP.mean(yourCollection)
【讨论】: