You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何一次性计算集合内两个字段总和以避免两次遍历?

一次遍历计算学生总年龄与总分数

当然可以,Kotlin的fold函数就能实现单次遍历同时计算两个总和,不用跑两次sumOf。

方法一:用Pair承载累加结果

这是最简洁的方式,利用Kotlin的Pair类型和解构声明:

data class Student(val name: String, val age: Int, val score: Int)

val students = listOf(
    Student("x", 10, 20),
    Student("y", 20, 40),
    Student("z", 30, 60)
)

// 单次遍历完成两个累加
val (totalAge, totalScore) = students.fold(0 to 0) { (accAge, accScore), student ->
    (accAge + student.age) to (accScore + student.score)
}

println("总年龄:$totalAge,总分数:$totalScore") // 输出:总年龄:60,总分数:120

方法二:用自定义数据类(更直观)

如果觉得Pair的语义不够清晰,可以自定义一个数据类来存放总和:

data class Student(val name: String, val age: Int, val score: Int)
data class SumResult(var totalAge: Int = 0, var totalScore: Int = 0)

val students = listOf(
    Student("x", 10, 20),
    Student("y", 20, 40),
    Student("z", 30, 60)
)

val sumResult = students.fold(SumResult()) { acc, student ->
    acc.apply {
        totalAge += student.age
        totalScore += student.score
    }
}

println("总年龄:${sumResult.totalAge},总分数:${sumResult.totalScore}")

两种方式都只遍历了学生集合一次,相比两次sumOf减少了一次遍历开销,在数据量较大时能体现出性能优势。

内容的提问来源于stack exchange,提问作者python dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:42:51