Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将映射序列转换为Scala中值序列的键映射_Scala_Transformation - Fatal编程技术网

将映射序列转换为Scala中值序列的键映射

将映射序列转换为Scala中值序列的键映射,scala,transformation,Scala,Transformation,我试着转动一系列的地图,比如说 val input = Seq(Map("a" -> 1, "b" -> 2), Map("a" -> 10, "c" -> 30), Map("b" -> 200, "c" -> 300, "d" -> 400)) 从这些映射中的键到它们在原始序列中的每个映射中映射到的值序列的映射 因此,上述内容应转化为 val output = Map("a" -&g

我试着转动一系列的地图,比如说

val input = Seq(Map("a" -> 1, "b" -> 2),
                Map("a" -> 10,  "c" -> 30),
                Map("b" -> 200, "c" -> 300, "d" -> 400))
从这些映射中的键到它们在原始序列中的每个映射中映射到的值序列的映射

因此,上述内容应转化为

val output = Map("a" -> Seq(1, 10),
                 "b" -> Seq(2, 200),
                 "c" -> Seq(30, 300),
                 "d" -> Seq(400))
我可以想出一些方法来实现这一点,但我正在寻找一种适合这种转换的惯用或最佳scala风格的解决方案?理想情况下不会浪费,但性能不是一个大问题

谢谢

您可以这样做:

val output = input.flatten.groupBy(_._1).mapValues(_.map(_._2))
它将首先将地图展平为所有地图条目的
Seq
。然后,它将地图条目分组到它们的键上。最后,将值(现在是映射项列表)映射到映射值列表。

您可以执行以下操作:

val output = input.flatten.groupBy(_._1).mapValues(_.map(_._2))

它将首先将地图展平为所有地图条目的
Seq
。然后,它将地图条目分组到它们的键上。最后,将值(现在是映射项列表)映射到映射值列表。

您只需使用
展平
,而不是
展平映射(uu.toSeq)
@Tim哦,没错。修正了。你可以使用
flatte
而不是
flatMap(u.toSeq)
@Tim哦,没错。固定的。