2012-06-12 10 views
5

मैं स्कैला के लिए नया हूं, और मैं एक सरल हैशटेबल को कार्यान्वित करना चाहता हूं जिसमें int कुंजी और स्ट्रिंग मान हैं।स्कैला हैशैप एकाधिक मान

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" है:

मैं निम्नलिखित कोड की कोशिश की। ऐसा लगता है कि यह हैशैप सिर्फ एक महत्वपूर्ण, मूल्य फ़ंक्शन है जिसमें एकाधिक मान नहीं हो सकते हैं। क्या स्कैला में बहु-मूल्य हैश तालिका रखने का कोई आसान तरीका है?

उत्तर

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

मल्टीमैप विशेषता का प्रयोग करें, एक मानक परिवर्तनशील 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

यह 'सेट' के परिवर्तनीय संस्करण को आयात किए बिना काम नहीं करेगा। –

+0

ट्रेविस के लिए वोट दें। उसने 50 सेकंड तक मुझे हराया। –