我试图编写一个方法来计算Scala中给定List
中元素的平均值。这是我的代码:
def meanElements(list: List[Float]): Float = {
list match {
case x :: tail => (x + meanElements(tail))/(list.length)
case Nil => 0
}
}
当我致电meanElements(List(10,12,14)))
时,我得到的结果与12不同。有人可以帮忙吗?
答案 0 :(得分:3)
您只需使用内置函数即可:
scala> def mean(list:List[Int]):Int =
| if(list.isEmpty) 0 else list.sum/list.size
mean: (list: List[Int])Int
scala> mean(List(10,12,14))
res1: Int = 12
scala>
答案 1 :(得分:0)
公式不正确,应该是:
case x :: tail => (x + meanElements(tail) * tail.length) / list.length
但是这个实现正在进行大量的划分和乘法。
最好将平均值的计算分成两步,
先计算总和,
然后除以list.length
。
那就是更像这样的东西:
def meanElements(list: List[Float]): Float = sum(list) / list.length
其中sum
是您必须实现的辅助函数。
如果您不想公开其实施,
然后你可以在meanElements
的主体中定义它。
(或@ph88指出,
它可以像list.reduce(_ + _)
一样简单。)