2012-06-12 23 views
5

Soy nuevo en Scala, y me gustaría implementar una tabla hash simple que tenga claves int y valores de cadena.scala hashmap valores múltiples

He probado el siguiente código:

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" 

Sin embargo, el valor de test_map (10) no es "prog_1", "prog_8" es simplemente "prog_8". Parece que este hashmap es solo una función clave de valor que no puede tener múltiples valores. ¿Existe una forma simple de tener una tabla hash multivalor en Scala?

Respuesta

10

Puede utilizar un MultiMap si no se preocupan por preservar el orden de inserción de los valores con la misma clave:

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

Utilice el rasgo MultiMap, para tomar un HashMap mutable estándar y mejorar con un poco de práctica métodos para manejar mapas de valores múltiples

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

Esto no funcionará sin importar la versión mutable de 'Set'. –

+0

Vote por Travis's. Él venció a mi por 50 segundos. –

Cuestiones relacionadas