2013-02-22 63 views
3

如何將Scala中的兩個MultiMaps與數值上的聯合以好的方式組合起來?在Scala中結合使用兩個MultiMaps

我目前還(因爲MM1和平方毫米與相同類型屈德寧):

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中的一個函數。

+1

http://stackoverflow.com/questions/7755214/scala-merge-maps-by-key可能是有用的在這裏。在基礎Map特徵中看到'unionWith','intersectionWith'會很好,但是scalaz解決方案可能適用於你的情況。 – Impredicative 2013-02-22 13:18:48

回答

3

要合併到mm2mm1,你可以這樣做:

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

謝謝,這真是太棒了!來自Haskell我有時會忘記。我仍在爭取更好的解決方案,我想逐個添加所有值可能會有點慢。 – leo 2013-02-22 14:51:30

+2

沒有辦法知道在沒有深入瞭解底層算法的情況下,逐個添加它們是否會變得更慢,相同,甚至更快。這很可能是相同的,因爲這遲早會發生什麼。績效需要被衡量爲更確定。 – 2013-02-23 11:38:47