首页 文章

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

提问于
浏览
1

我有一系列像下面这样的元组 . 文件“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 回答

  • 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)
    )
    

相关问题