एक scala.collection.mutable.Map में एक तत्व जोड़ने के लिए वाक्यविन्यास क्या है?


81

एक scala.collection.mutable.Map में एक तत्व जोड़ने के लिए वाक्यविन्यास क्या है?

यहाँ कुछ असफल प्रयास हैं:

val map = scala.collection.mutable.Map

map("mykey") = "myval"

map += "mykey" -> "myval"

map.put("mykey","myval")

इस तरह की टिप्पणी से पता चलता है कि स्केला के कार्यों को कितनी बुरी तरह से नाम दिया गया है और यह कितना स्पष्ट है!
एडेलिन

जवाबों:


93

मुद्दा यह है कि आपके कोड की पहली पंक्ति वह नहीं है जिसकी आपने अपेक्षा की थी।

आपको उपयोग करना चाहिए:

val map = scala.collection.mutable.Map[A,B]()

आपके पास आइटम जोड़ने के लिए कई समकक्ष विकल्प हैं:

scala> val map = scala.collection.mutable.Map[String,String]()
map: scala.collection.mutable.Map[String,String] = Map()


scala> map("k1") = "v1"

scala> map
res1: scala.collection.mutable.Map[String,String] = Map((k1,v1))


scala> map += "k2" -> "v2"
res2: map.type = Map((k1,v1), (k2,v2))


scala> map.put("k3", "v3")
res3: Option[String] = None

scala> map
res4: scala.collection.mutable.Map[String,String] = Map((k3,v3), (k1,v1), (k2,v2))

और शुरू Scala 2.13:

scala> map.addOne("k4" -> "v4")
res5: map.type = HashMap(k1 -> v1, k2 -> v2, k3 -> v3, k4 -> v4)

4
काश, newखाली कोष्ठक का उपयोग करते समय अनावश्यक हैं।
डैनियल सी। सोबरल

45

हमेशा की तरह, आपको सवाल करना चाहिए कि क्या आपको वास्तव में एक परिवर्तनशील मानचित्र की आवश्यकता है।

अपरिवर्तनीय नक्शे बनाने के लिए तुच्छ हैं:

val map = Map(
  "mykey" -> "myval",
  "myotherkey" -> "otherval"
)

जब पहली बार बनाया जा रहा हो तो म्यूटेबल मैप्स अलग नहीं हैं:

val map = collection.mutable.Map(
  "mykey" -> "myval",
  "myotherkey" -> "otherval"
)

map += "nextkey" -> "nextval"

इन दोनों मामलों में, मैप उदाहरण के लिए सही प्रकार के मापदंडों को निर्धारित करने के लिए इनवेंशन का उपयोग किया जाएगा।

आप किसी अपरिवर्तनीय मानचित्र को भी पकड़ सकते हैं var, चर तब "अद्यतन" करते समय हर बार एक नए अपरिवर्तनीय मानचित्र उदाहरण के साथ अद्यतन किया जाएगा।

var map = Map(
  "mykey" -> "myval",
  "myotherkey" -> "otherval"
)

map += "nextkey" -> "nextval"

यदि आपके पास कोई प्रारंभिक मान नहीं है, तो आप Map.empty का उपयोग कर सकते हैं:

val map : Map[String, String] = Map.empty //immutable
val map = Map.empty[String,String] //immutable
val map = collection.mutable.Map.empty[String,String] //mutable

2
मान लीजिए कि मेरे पास मैप फ़ील्ड के साथ एक क्लास है और इसे किसी भी समय अपडेट किया जा सकता है; क्या वास्तव में स्काला में 'वैल' + म्यूटेबल मैप के बजाय 'var' + अपरिवर्तनीय मानचित्र को प्राथमिकता दी जाती है? एक अनुभवी जावा प्रोग्रामर के रूप में, मैं 2 विकल्प के लिए जाऊंगा, लेकिन आपके उत्तर से मुझे लगता है कि 1 स्कैला दुनिया में अधिक सामान्य है?
omnomnom

1
और यदि आप एक बार में कई प्रविष्टियाँ जोड़ना चाहते हैं:map ++ Seq("another1" -> "anotherVal1", "another2" -> "anotherVal2")
ब्रेंट फ़ॉस्ट

18

जब आप कहें

val map = scala.collection.mutable.Map

आप मानचित्र का उदाहरण नहीं बना रहे हैं, बल्कि मानचित्र प्रकार को बदल रहे हैं।

map: collection.mutable.Map.type = scala.collection.mutable.Map$@fae93e

निम्न के बजाय प्रयास करें:

scala> val map = scala.collection.mutable.Map[String, Int]()
map: scala.collection.mutable.Map[String,Int] = Map()

scala> map("asdf") = 9

scala> map
res6: scala.collection.mutable.Map[String,Int] = Map((asdf,9))

3

एक नया अपरिवर्तनीय मानचित्र बनाएँ:

scala> val m1 = Map("k0" -> "v0")   
m1: scala.collection.immutable.Map[String,String] = Map(k0 -> v0)

उपरोक्त मानचित्र में एक नई कुंजी / मूल्य जोड़ी जोड़ें (और एक नया नक्शा बनाएं, क्योंकि वे दोनों अपरिवर्तनीय हैं):

scala> val m2 = m1 + ("k1" -> "v1")             
m2: scala.collection.immutable.Map[String,String] = Map(k0 -> v0, k1 -> v1)

2
var test = scala.collection.mutable.Map.empty[String, String]
test("myKey") = "myValue"

2

प्रारंभिक मूल्य के बिना एक परिवर्तनशील मानचित्र बनाएं:

scala> var d= collection.mutable.Map[Any, Any]()
d: scala.collection.mutable.Map[Any,Any] = Map()

प्रारंभिक मानों के साथ एक परिवर्तनशील मानचित्र बनाएं:

scala> var d= collection.mutable.Map[Any, Any]("a"->3,1->234,2->"test")
d: scala.collection.mutable.Map[Any,Any] = Map(2 -> test, a -> 3, 1 -> 234)

मौजूदा कुंजी-मूल्य अपडेट करें:

scala> d("a")= "ABC"

नया कुंजी-मूल्य जोड़ें:

scala> d(100)= "new element"

अद्यतन किए गए नक्शे की जाँच करें:

scala> d
res123: scala.collection.mutable.Map[Any,Any] = Map(2 -> test, 100 -> new element, a -> ABC, 1 -> 234)

0

var नक्शा: मानचित्र [स्ट्रिंग, स्ट्रिंग] = मानचित्र ()

var map1 = map + ("लाल" -> "# FF0000")

Println (map1)


1
डरा और अकेला कोड का यह छोटा सा टुकड़ा एक स्पष्टीकरण द्वारा कंपनी और संरक्षण के लिए भीख माँग रहा है।
युन्नोस्क

3
एसओ में आपका स्वागत है। प्रश्नों के साथ यह पुराना (यह 10 साल पहले पूछा गया था), और पहले से ही प्रस्तुत किए गए इतने सारे उत्तर के साथ, यह इंगित करना उपयोगी है कि आपका उत्तर विषय में कुछ नया कैसे जोड़ता है। जैसा भी हो, आपकी पोस्ट बहुत ही खराब स्काला शैली प्रदर्शित करती है।
jwvh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.