private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
इसे अपरिवर्तनीय रूप में कैसे परिवर्तित करें?परिवर्तनीय मानचित्र में परिवर्तनीय कनवर्ट करना
private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
इसे अपरिवर्तनीय रूप में कैसे परिवर्तित करें?परिवर्तनीय मानचित्र में परिवर्तनीय कनवर्ट करना
अपरिवर्तनीय पदानुक्रम एक मल्टीमैप शामिल नहीं है, ताकि आप एक ही सुविधाजनक वाक्य रचना के साथ परिवर्तित संरचना का उपयोग करने में सक्षम नहीं होगा। लेकिन अगर आप कुंजी/valueset जोड़े, तो से निपटने के लिए खुश हैं:
तुम सिर्फ एक परिवर्तनशील HashMap
चाहते हैं, तो आप सिर्फ x.toMap
2.8 या collection.immutable.Map(x.toList: _*)
में 2.7 में उपयोग कर सकते हैं।
लेकिन यदि आप पूरी संरचना को अपरिवर्तनीय सेट करना चाहते हैं - अंतर्निहित सेट सहित! - तो आपको और करना होगा: आपको सेट को कन्वर्ट करने की आवश्यकता है। 2.8 में:
x.map(kv => (kv._1,kv._2.toSet)).toMap
2,7 में:
collection.immutable.Map(
x.map(kv => (kv._1,collection.immutable.Set(kv._2.toList: _*))).toList: _*
)
घोटाला 2.8-स्थिर के लिए प्रतीक्षा में असंतोष के साथ – Jeriho
scala> val mutableMap = new HashMap[Int, String]
mutableMap: scala.collection.mutable.HashMap[Int,String] = Map()
scala> mutableMap += 1 -> "a"
res5: mutableMap.type = Map((1,a))
scala> mutableMap
res6: scala.collection.mutable.HashMap[Int,String] = Map((1,a))
scala> val immutableMap = mutableMap.toMap
immutableMap: scala.collection.immutable.Map[Int,String] = Map((1,a))
scala> immutableMap += 2 -> "b"
<console>:11: error: reassignment to val
immutableMap += 2 -> "b"
^
जब मैंने "mutableMap.toMap" देखा तो मैं थोड़ा आश्चर्यचकित हुआ लेकिन फिर मैंने एपीआई सत्यापित की और मुझे कुछ भी नहीं मिला। http://www.scala-lang.org/docu/files/api/scala/collection/mutable/HashMap.html दूसरा मुद्दा - सेट [बी] उत्परिवर्तनीय है। यही कारण है कि कनवर्ट करना इतना आसान नहीं है। – Jeriho
@ जेरिहो: टोपी को स्कैला 2.8 – Eastsun
थैक्स ईस्ट्सुन में पेश किया गया है। क्षमा करें जेरिको, मैंने इसका उल्लेख नहीं किया। –
आप myMap.toMap
का उपयोग स्काला 2.8 और बाद के संस्करणों में अपरिवर्तनीय में एक एक परिवर्तनशील नक्शा कन्वर्ट करने के लिए कर सकते हैं।
प्रलेखन से toMap
की परिभाषा को देखते हुए:
def toMap[T, U](implicit ev: A <:< (T, U)): immutable.Map[T, U] = {
val b = immutable.Map.newBuilder[T, U]
for (x <- self) b += x
b.result
}
तुम बस निम्नलिखित
val imm_map = MMMap.toMap
को मैं * कर सकते हैं अनुमान * यदि आप एक नया बना? बस अनुमान लगाते हैं, लेकिन आमतौर पर चीजें इस तरह से काम करती हैं। –
मुझे यकीन नहीं है कि आपका क्या मतलब है – Jeriho
हम्म .. 'MMMap.toMap'? –