【问题标题】:Scala : Merge two immutable maps on key and get new immutable map with same type [duplicate]Scala:在键上合并两个不可变映射并获得具有相同类型的新不可变映射 [重复]
【发布时间】:2018-03-21 00:44:15
【问题描述】:

我想在以下类型的同一键上合并两个不可变映射:

scala.collection.immutable.HashMap[String,Seq[String]]

和返回类型也应该相同: scala.collection.immutable.HashMap[String,Seq[String]]

例如:

scala> map2
res17: scala.collection.immutable.HashMap[String,Seq[String]] = Map(key1 -> List(value1-2), key2 -> List(value2))

scala> map3
res18: scala.collection.immutable.HashMap[String,Seq[String]] = Map(key1 -> List(value1-3), key3 -> List(value3))


merging above two map should be output to:

Map(key1->List(value1-2,value1-3), key2->List(value2), key3->List(value3))

注意:返回的映射应该有一个字符串的序列作为值,而不是字符串序列的序列

【问题讨论】:

  • 是的,肯定是重复的。 scalaz 对这个问题的回答对此更好,因为它实际上只是map2 |+| map3

标签: scala dictionary merge key seq


【解决方案1】:

你可以像这样合并两张地图:

map2 ++ map3.map{ case (k,v) => k -> (v ++ map2.getOrElse(k,Nil)) }

因为++ 操作符是不可变的,所以会创建一个新的Map

【讨论】:

  • 感谢 R. Fossati 的及时帮助。我正从 Java 背景迁移到 Scala 并面临困难,因为 Scala 具有截然不同的语法和速记...
猜你喜欢
  • 2018-08-23
  • 2021-12-22
  • 2016-08-30
  • 1970-01-01
  • 2023-04-09
  • 2011-03-26
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多