swift - 我如何获得表格视图(swift)中分数的平均值?
问题描述
我想显示输入到实体中的所有值的平均值。基本上,人们会在 TableView 上按添加,然后会出现一个弹出窗口询问分数,然后将“考试”添加到 tableview。我希望能够将所有分数相加并获得它们的平均值,然后我可以将其添加到标签中。我试过遵循其他一些教程,但它给了我一个错误。
https://i.stack.imgur.com/P7exB.jpg https://i.stack.imgur.com/WWITI.jpg
上面的图片是为了上下文。
var i = 0
var sum = 0
for i in 0...methodsExam.count {
let title = methodsExam[i]
let str : String = title.value(forKey: "score") as! String
sum = sum + Int(str)!
}
let avg = sum/methodsExam.count
averageScore.text = "Average: \(avg)"
解决方案
假设methodsExam
是 [MethodsExam] 数组,您可以将循环更改为
var sum = 0.0
for item in methodsExam {
if let scoreStr = item.score, let score = Double(scoreStr) {
sum += score
}
}
let average = sum / Double(methodsExam.count)
我在这里使用 Double 以获得更高的精度。
这也可以通过高阶函数来完成
let average = methodsExam.reduce(into: 0.0) {
if let scoreStr = $1.score, let score = Double(scoreStr) { $0 += score }
} / Double(methodsExam.count)
由于我们要除以数组计数,我们还必须检查数组不为空以避免被 0 除,因此我们可以将代码放入函数中并执行此操作
func calculateAverage(_ array: [MethodsExam]) -> Double {
guard !array.isEmpty else { return 0.0 }
return array.reduce(into: 0.0) {
if let scoreStr = $1.score, let score = Double(scoreStr) { $0 += score }
} / Double(array.count)
}
一个警告,我假设它score
可以是 nil 因为 MethodsExam 是一个 NSManagedObject 而不是因为它会保存 nil 值。如果它确实可以保存 nil 值,那么您需要考虑计算平均值,数组中的所有值或仅非 nil 值。
推荐阅读
- r - GGplot 对象不会根据数据框中指定的颜色对条形进行着色
- docker - 具有 Windows 节点 Kube-proxy 错误的 Kubernetes 集群
- javascript - 平滑缩放步骤
- python - 访问类中的变量字段
- stream - SICP中的延迟“让”
- matlab - MATLAB 代码需要太多时间来编译
- react-native - 有没有办法克服错误“TypeError:headers.map is not a function”?
- r - 如何修复线性混合模型中的错误?
- format - 如何使 Tableau 中的文本框在尺寸上匹配?
- r - 如何使用 tidycensus 和 tidyverse 准确汇总子组误差值?