计算Scala中元组数组的均值

时间:2011-05-23 23:07:28

标签: scala

我正在编写一个简单的短代码来向新手程序员演示一系列随机数如何收敛。为此,我生成了一个元组数组,用于存储随机大小和填充数组的大小和平均值。这是我用来做的代码:

val random = new scala.util.Random()

def gen(random:scala.util.Random) = {
    val array = Array.fill(2 + random.nextInt(999)) { random.nextInt(100) }
    val sum = array.reduceLeft(_ + _)
    val mean = sum.toDouble / array.size
    (array.size, mean)
}

val array = Array.fill(10000) { gen(random) }

然后,我想计算等大小数组均值的平均值,将其放入数组中,然后按原始数组的大小对其进行排序。所以,如果我有一个元组数组:(2,57),(2,22),(2,40),我想要一个条目(2,(57 + 22 + 40)/ 3),并且对于数组中的每个条目都是如此。

我不知道如何在Scala中以优雅,惯用和清晰的方式做到这一点。有人能帮忙吗?而且,如果您对上述代码有任何建设性的批评,那也会有所帮助。

感谢。

1 个答案:

答案 0 :(得分:8)

假设:

def mean(xs: Iterable[Double]) = xs.sum / xs.size

然后:

array
  .groupBy(_._1)
  .mapValues(xs => mean(xs.map(_._2)))
  .toArray
  .sortBy(_._1)