Объединение двух изменяемых карт Scala с сохранением ключей первой карты - PullRequest
0 голосов
/ 06 сентября 2018

API Scala позволяет добавлять одну карту к другой следующим образом:

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 сохраняются, если повторяется в m2.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

m1 ++= (m2 ++ m1) возможно? У вас есть для того, чтобы мутировать m1 (в любом случае в scala это редко бывает правильно)? Вы можете просто создать новую карту как m2 ++ m1 в противном случае ...

0 голосов
/ 06 сентября 2018

Сохранить как список (или подобную коллекцию) и сгруппировать их:

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

Вы можете, конечно, удалить оставшиеся целые числа из списков значений карты.

...