Kotlin 求具有相同第一个元素的对的平均值。科特林

Kotlin 求具有相同第一个元素的对的平均值。科特林,kotlin,Kotlin,我在myPairs:list中有一个配对列表,需要计算具有相同第一个元素的每组配对的平均值 我想出了这个密码。它分别查找每个组的总和和计数,然后在循环中除以计数以查找平均值 val myAverages = myPairs.groupingBy { it.first }.fold(0.0) { sum, element -> sum + element.second }.toMutableMap() val myCounts = myPairs.groupingBy { it.first

我在
myPairs:list
中有一个配对列表,需要计算具有相同第一个元素的每组配对的平均值

我想出了这个密码。它分别查找每个组的总和和计数,然后在循环中除以计数以查找平均值

val myAverages = myPairs.groupingBy { it.first }.fold(0.0) { sum, element -> sum + element.second }.toMutableMap()
val myCounts = myPairs.groupingBy { it.first }.eachCount()

for ((myStr, count) in myCounts) {
        myAverages[myStr] = myAverages[myStr]!!.div(count)
    }

return myAverages

我想知道是否有更优雅的/Kotlin风格的方法通过使用聚合或折叠函数来解决这个问题?我的解决方案可行,但在我看来真的很难看

您可以使用
groupBy
功能对数据集进行分组。一旦分组了
映射
,就可以使用
average
函数
将其值(
列表
)映射到所需的平均值

var mapOfAverages = myPairs.groupBy   { it.first }
                           .mapValues { it.value.map { pair -> pair.second }.average() }

这将为您提供一个
映射
,其中
是您的
对的第一个元素
,值是该特定键的所有第二个元素的平均值。

您的行看起来非常漂亮,并且工作正常。想到这一点感觉有点不直观,但我只和kotlin一起工作了大约一周:)