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

Concatenate two Scala mutable maps preserving the keys of the first map

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 中连接 m1m2 对,如果在 m2 中重复,则保留 m1 对。

存储为列表(或类似集合)并将它们分组:

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

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

m1 ++= (m2 ++ m1) 也许吧? 你 来改变 m1 (无论如何,这在 scala 中很少是正确的事情)? 您可以创建一个新地图 m2 ++ m1 否则...