代码之家  ›  专栏  ›  技术社区  ›  user1868607

连接两个Scala可变映射,保留第一个映射的键

  •  0
  • user1868607  · 技术社区  · 7 年前

    scala API允许您将一个映射附加到另一个映射,如下所示:

    import scala.collection.mutable.{Map => MutableMap}
    val m1: MutableMap[Int,String] = MutableMap(1 -> "A", 2 -> "B", 3 -> "C")
    val m2: MutableMap[Int,String] = MutableMap(2 -> "X", 3 -> "Y", 4 -> "Z")
    m1 ++= m2 // outputs: Map(2 -> X, 4 -> Z, 1 -> A, 3 -> Y)
    m1        // outputs: Map(2 -> X, 4 -> Z, 1 -> A, 3 -> Y)
    

    其行为是用来自右映射的对覆盖重复的对。

    以相反的方式做这件事的好方法是什么?也就是说,连接 m1 m2 在里面 m1级 m1级 如果在中重复,则保留 .

    2 回复  |  直到 7 年前
        1
  •  1
  •   Lasf    7 年前

    val l1 = List(1 -> "A", 2 -> "B", 3 -> "C")
    val l2 = List(2 -> "X", 3 -> "Y", 4 -> "Z")
    
    (l1 ::: l2).groupBy(_._1) //Map[Int, List[Int, String]]
    //output: Map(2 -> List((2,B), (2,X)), 4 -> List((4,Z)), 1 -> List((1,A)), 3 -> List((3,C), (3,Y)))
    

    当然,如果需要,可以从映射的值列表中删除剩余的整数。

        2
  •  2
  •   Dima    7 年前

    m1 ++= (m2 ++ m1) 也许? 你…吗 m1 (无论如何,在scala中这样做很少是正确的)? 你可以创建一个新的地图 m2 ++ m1 否则。。。

    推荐文章