计算Scala中列表中元素的平均值

时间:2017-10-07 12:53:04

标签: scala list mean

我试图编写一个方法来计算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不同。有人可以帮忙吗?

2 个答案:

答案 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(_ + _)一样简单。)