计算平均值并从Scala中删除列表

时间:2016-04-30 22:12:28

标签: scala average

我在Scala的第一周,并且正在努力解决使用这种语言编写代码的方式。

我正在尝试编写一个函数来确定列表中的平均数,并删除低于该平均值的值。例如:

我有这个清单:

List[(String, Int)] = List(("A", 1), ("B", 1), ("C", 3), ("D", 2), ("E", 4))

结果应为2.2

因此,该功能还应删除条目("A", 1)("B", 1)("D", 2),因为它们低于平均值。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

你可以计算元组列表中第二个元素的平均值,你不需要自己做总和,因为Scala有一个内置函数。首先,我们需要将元组列表转换为c++ -I Y/to/boost_1_60_0 example.cpp -o example 值列表,我们可以使用Int函数执行此操作,如下所示

map

现在您有平均值,您可以根据其值

过滤列表
val average = list.map(_._2).sum/list.size.toDouble

请注意,我们没有从列表中删除任何内容,我们创建了一个带有过滤元素的新内容

答案 1 :(得分:1)

你可以这样做:

val sum = list.map(_._2).sum
val avg: Double = sum / list.size.toDouble

val filtered = list.filter(_._2 > avg)

注意这是两次遍历列表,一次用于求和,一次用于过滤。另一件需要注意的事情是Scala List[T]是不可变的。过滤时,您将使用过滤后的数据创建新的List对象。

答案 2 :(得分:1)

val average = list.map(_._2).sum / list.size.toDouble
list.filter(p => p._2 >= average)

你需要施放到Double,否则平均值会被投射到Int并且不精确。 filter仅保留元素大于平均值。