微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何在表格视图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值的平均值。

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