我正在尝试编写一个泛型平均函数,它在包含数字类型的Iterable上运行.例如,它将在数组上运行,如下所示:
val rand = new scala.util.Random()
val a = Array.fill(1000) { rand.nextInt(101) }
val b = Array.fill(1000) { rand.nextDouble }
println(mean(a))
println(mean(b))
Run Code Online (Sandbox Code Playgroud)
希望能够处理其他迭代,例如列表.
我尝试了各种咒语的方法,但无济于事:
def mean[T <% Numeric[T]](xs: Iterable[T]) = xs.sum.toDouble / xs.size
def mean[A](xs: Iterable[Numeric[A]]):Double = xs.sum.toDouble / xs.size
def mean[T](xs: Iterable[T])(implicit num: Numeric[T]):Double = xs.sum / xs.size
def mean(xs: Iterable[Double]) = xs.sum / xs.size
Run Code Online (Sandbox Code Playgroud)
在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) }
Run Code Online (Sandbox Code Playgroud)
然后,我想计算等大小数组均值的平均值,将其放入数组中,然后按原始数组的大小对其进行排序.所以,如果我有一个元组数组:(2,57),(2,22),(2,40),我想要一个条目(2,(57 + 22 + 40)/ 3),并且对于数组中的每个条目都是如此.
我在Scala中以优雅,惯用和清晰的方式解决了这个问题.有人能帮忙吗?而且,如果您对上述代码有任何建设性的批评,那也会有所帮助.
谢谢.
scala ×2