gpt4 book ai didi

scala - map 中包含的列表中的平均值

转载 作者:行者123 更新时间:2023-12-04 23:53:15 25 4
gpt4 key购买 nike

这是我编写的用于计算 map 值中包含的平均坐标值的代码:

 val averaged = Map((2,10) -> List((2.0,11.0), (5.0,8.0)))
//> averaged : scala.collection.immutable.Map[(Int, Int),List[(Double, Double)
//| ]] = Map((2,10) -> List((2.0,11.0), (5.0,8.0)))
averaged.mapValues(m => {


val s1 = m.map(m => m._1).sum
val s2 = m.map(m => m._2).sum

(s1 / m.size , s2 / m.size)
}) //> res0: scala.collection.immutable.Map[(Int, Int),(Double, Double)] = Map((2,
//| 10) -> (3.5,9.5))

此代码按预期工作,但 mapValues 函数需要传递的次数等于列表的长度。是否有更惯用的方法来使用 Scala 实现相同的目标?

最佳答案

如果我没有正确理解您的问题,您是在询问是否有可能避免在每次访问 时遍历mmapValues 方法返回一个 Map 的 View ,意味着访问上会有重复的工作。为避免这种情况,只需使用 map 即可:

val averaged = Map((2, 10) -> List((2.0, 11.0), (5.0, 8.0)))
val result = averaged.map {
case (key, m) =>
val (s1, s2) = m.unzip
(s1.sum / m.size, s2.sum / m.size)
}
println(result)
// Map((2,10) -> (3.5,9.5))

使用unzip 还意味着代码不会多次遍历m

关于scala - map 中包含的列表中的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28820096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com