我在Scala的第一周,并且正在努力解决使用这种语言编写代码的方式。
我正在尝试编写一个函数来确定列表中的平均数,并删除低于该平均值的值。例如:
我有这个清单:
List[(String, Int)] = List(("A", 1), ("B", 1), ("C", 3), ("D", 2), ("E", 4))
结果应为2.2
。
因此,该功能还应删除条目("A", 1)
,("B", 1)
和("D", 2)
,因为它们低于平均值。
任何人都可以帮助我吗?
答案 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
仅保留元素大于平均值。