如何解决我如何在表格视图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值的平均值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。