2012-06-12 3 views
5

Sono un neofita di Scala e vorrei implementare una semplice tabella hash con le chiavi int ei valori stringa.scala hashmap valori multipli

Ho provato il codice seguente:

import scala.collection.mutable.HashMap 
val test_map = new HashMap[Int, String] 
test_map += 10 -> "prog_1" 
test_map += 20 -> "prog_2" 
test_map += 25 -> "prog_3" 
test_map += 15 -> "prog_4" 
test_map += 10 -> "prog_8" 

Tuttavia il valore di test_map (10) non è "prog_1", "prog_8" è solo "prog_8". Sembra che questa hashmap sia solo una funzione chiave, valore che non può avere più valori. C'è un modo semplice per avere una tabella hash multi-valore in Scala?

risposta

10

È possibile utilizzare un MultiMap se non si preoccupano di conservare ordine di inserimento per i valori con la stessa chiave:

import scala.collection.mutable.{ HashMap, MultiMap, Set } 

val test = new HashMap[Int, Set[String]] with MultiMap[Int, String] 

test.addBinding(10, "prog_1") 
test.addBinding(20, "prog_2") 
test.addBinding(25, "prog_3") 
test.addBinding(15, "prog_4") 
test.addBinding(10, "prog_8") 
3

Utilizzare il tratto MultiMap, di prendere una HashMap mutabile standard ed valorizzarlo con un po 'comoda metodi per la gestione di mappe multivalore

import scala.collection.mutable.HashMap 
import scala.collection.mutable.MultiMap  
import scala.collection.mutable.Set 

val test_map = new HashMap[Int, Set[String]] with MultiMap[Int, String] 
test_map.addBinding(10 ,"prog_1") 
test_map.addBinding(20 ,"prog_2") 
test_map.addBinding(25 ,"prog_3") 
test_map.addBinding(15 ,"prog_4") 
test_map.addBinding(10 ,"prog_8") 
+0

Questo non funzionerà senza importare la versione mutabile di 'Set'. –

+0

Vota per Travis's. Ha battuto il mio per 50 secondi. –