2015-09-10 38 views
0

我想用Array[(K,V)]中的元素填充HashMap[K,ArrayBuffer[V]]從Scala中的數組創建HashMap

我試過使用multimap,但它似乎不支持ArrayBuffer但只有Set

我結束了這段代碼:

val hashmap = list.foldLeft(HashMap.empty[K, ArrayBuffer[V]]){ (acc, pair) => 
    acc.getOrElseUpdate(pair._1, ArrayBuffer.empty[V]) += pair._2 
    acc 
} 

是否有更優雅/有效的方式來做到這一點?

+0

你可否詳細說明'Array [k,v]'?我真的不明白。 – mfirry

+0

@mfirry對不起,這是一個數組[[k,v]]。我試過groupBy(_._ 1),但沒有給我一個正確的結果。 – Alex

回答

0
val source = Array(1 -> "one", 1 -> "ein", 2 -> "two", 3 -> "three") 
val result = source.groupBy(_._1).mapValues(_.map(_._2)) 
println(result.mapValues(_.toList)) 
  • source是一個示例數據,這你可以有。 1有2個值:oneein
  • 結果是爲了使用groupBymapValues
  • println電話.toList對名單相當toString打電話,因爲toStringArray不打印要素爲基礎。
+1

小心'mapValues';它不會創建一個新的'Map',它只會返回一個*視圖*到一個'Map',這意味着如果你多次訪問一個鍵,它會做重複(非平凡)的工作。如果你想要一個新的Map,只需使用'.map {case(k,v)=>(k,f(v))}'。 – dhg