【问题标题】:Combine two MultiMaps in Scala在 Scala 中合并两个 MultiMap
【发布时间】:2013-02-23 19:41:14
【问题描述】:

如何在 Scala 中以一种很好的方式将两个 MultiMap 与值集上的并集结合起来?

我目前这样做(假设 mm1 和 mm2 是具有相同类型的 MultiMap):

val tempmm = (mm1.keySet union mm2.keySet).
               map{k=>(k,(mm1.getOrElse(k,Set()) union mm2.getOrElse(k,Set())))}
tempmm.foreach{case (k,v) => mm1(k)=v}

现在我在 mm1 中得到了正确的结果。但我相信一定有更好的方法。甚至可能是 MultiMap 中的一个函数。

【问题讨论】:

标签: scala


【解决方案1】:

要将mm2 合并到mm1,您可以这样做:

for ( (k, vs) <- mm2; v <- vs ) mm1.addBinding(k, v)

【讨论】:

  • 谢谢,太好了!来自Haskell,我有时会忘记。我仍在寻找更好的解决方案,我想将所有值一个一个添加可能会有点慢。
  • 如果不深入了解底层算法,无法知道将它们逐个添加是否会更慢、相同或更快。这很可能是相同的,因为这最终是迟早要发生的事情。需要对性能进行衡量才能更加确定。
猜你喜欢
  • 2019-01-02
  • 2018-12-31
  • 2018-05-18
  • 2015-10-18
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2016-03-27
  • 2018-05-07
相关资源
最近更新 更多