2012-06-12 83 views
5

我是新来的斯卡拉,我想实现一个简单的哈希表,它具有int键和字符串值。斯卡拉hashmap多个值

我尝试以下的代码:

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" 

然而test_map(10)的值不是 “prog_1”, “prog_8” 它只是 “prog_8”。看来这个hashmap只是一个关键的值函数,它不能有多个值。是否有一种简单的方法在Scala中创建多值散列表?

回答

10

您可以使用MultiMap如果你不关心保留插入顺序值具有相同的键:

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

使用Multimap之特点,采取的标准可变HashMap和一些方便的提升呢处理多值地图的方法

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

如果不导入可变版本的“Set”,这将不起作用。 –

+0

为特拉维斯的投票。他击败了我50秒。 –