将一系列元组合并到scala中的另一个序列中

时间:2018-05-18 00:20:50

标签: scala

我有一系列像下面这样的元组。文件“abc”和“xyz”中出现“x”和“y”的数量

Seq(("abc", Map("x" -> 1, "y" -> 2)), ("xyz", Map("x" -> 2, "y" -> 1)))

如何从上面的序列中创建如下所示的输出。

Seq(("x", Map("abc" -> 1, "xyz" -> 2)), ("y", Map("abc" -> 2, "xyz" -> 1)))

1 个答案:

答案 0 :(得分:3)

这是一种可能性:

val s = Seq(
  ("abc", Map("x" -> 1, "y" -> 2)), 
  ("xyz", Map("x" -> 2, "y" -> 1))
)

val t = (for {
  (x, yvs) <- s 
  (y, v) <- yvs
} yield (y, (x, v)))
  .groupBy(_._1)
  .mapValues(_.unzip._2.toMap)

println(t)

这会产生(直到未分类键的随机重新排序):

Map(
  x -> Map(abc -> 1, xyz -> 2),
  y -> Map(abc -> 2, xyz -> 1)
)