2012-06-12 16 views
5

Tôi mới dùng Scala và tôi muốn triển khai một hashtable đơn giản có các khóa int và các giá trị chuỗi.scala hashmap nhiều giá trị

Tôi đã thử các mã sau:

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" 

Tuy nhiên giá trị của test_map (10) không phải là "prog_1", "prog_8" nó chỉ là "prog_8". Dường như hashmap này chỉ là một hàm khóa, giá trị mà không thể có nhiều giá trị. Có cách nào đơn giản để có bảng băm đa giá trị trong Scala?

Trả lời

10

Bạn có thể sử dụng một MultiMap nếu bạn không quan tâm đến việc bảo tồn trật tự chèn cho các giá trị với cùng chính:

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

Sử dụng các đặc điểm Multimap, để có một HashMap có thể thay đổi tiêu chuẩn và nâng cao nó với một số thuận tiện các phương pháp xử lý bản đồ có giá trị nhiều

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

Điều này sẽ không hoạt động nếu không nhập phiên bản có thể thay đổi của 'Bộ'. –

+0

Bình chọn cho Travis. Anh ta đã đánh bại tôi trong 50 giây. –