如何在地图中使用归约求和列表

时间:2018-08-12 14:44:12

标签: scala

我已经生成了以下类型的地图

immutable.Map[Int,List[Double]]

Map(
1 -> List(1.02),
2 -> List(0.42, 6.88))

我无法理解如何访问地图中的List()并使用reduce来求和。

myMap.reduce(???)

1 个答案:

答案 0 :(得分:4)

您可以使用.map()函数来迭代Map。每次迭代都将获得一个键和一个值,并且需要返回一个键和一个值。在您的情况下,key将是您的整数之一(12),我们可以直接通过。 value将是一个Doubles列表,我们可以使用内置的.sum将其汇总:

myMap.map { case (key, value) => (key, value.sum) } 

示例:

scala> val myMap = Map(1 -> List(1.02), 2 -> List(0.42, 6.88))
myMap: scala.collection.immutable.Map[Int,List[Double]] = Map(1 -> List(1.02), 2 -> List(0.42, 6.88))

scala> myMap.map { case (key, value) => (key, value.sum) } 
res0: scala.collection.immutable.Map[Int,Double] = Map(1 -> 1.02, 2 -> 7.3)

您可以将.sum替换为.reduce(_ + _),并获得相同的答案。