首页 文章

将两个 Map 合并为一个序列标量

提问于
浏览
0

我有两个 Map 如下

Map("x" -> Seq("abc"), "z" -> Seq("ghj")) and Map("y" -> Seq("xyz"), "z" -> Seq("pqr"))

我想要的输出是将这两个映射组合成一个序列,这样两个映射中存在的键应该有两个非空序列,而只有一个映射中存在的键应该得到相应的Seq和一个空的Seq .

Seq(("x", Seq("abc"), Seq()), ("y", Seq(), Seq("xyz")), ("z", Seq("ghj"), Seq("pqr"))

2 回答

  • 3

    这是一种方法:

    val result = (m1.keySet ++ m2.keySet).map {
      k: String => (k, m1.getOrElse(k, Seq()), m2.getOrElse(k, Seq()))
    }
    
  • 0

    这是我丑陋的解决方案 .

    val res1 = map1.map { case (k, v) => if (map2.contains(k)) (k, v, map2(k)) else (k, v, Seq()) }
    val res2 = map2.filter { case (k, _) => !map1.contains(k) }.map { case (k, v) => (k, Seq(), v) }
    val res3 = res1 ++ res2
    res3.toList.sortBy(_._1)
    

相关问题