मैं अपरिवर्तनीय रूपांतरित कैसे कर सकता हूं। मैप करने योग्य करने के लिए मैप। स्कैला में मैप ताकि मैं मानचित्र में मान अपडेट कर सकूं?मैं अपरिवर्तनीय कैसे परिवर्तित कर सकता हूं। मैप करने योग्य करने के लिए मैप। Scala में मैप?
उत्तर
val myImmutableMap = collection.immutable.Map(1->"one",2->"two")
val myMutableMap = collection.mutable.Map() ++ myImmutableMap
collection.breakOut का उपयोग करने के बारे में कैसे?
import collection.{mutable, immutable, breakOut}
val myImmutableMap = immutable.Map(1->"one",2->"two")
val myMutableMap: mutable.Map[Int, String] = myImmutableMap.map(identity)(breakOut)
यह * कूल * है, लेकिन मूल रूप से वही काम करता है जैसे 'mutable.Map # apply' थोड़ा और बॉयलरप्लेट के साथ। –
वहाँ एक खाली परिवर्तनशील Map
अपरिवर्तनीय Map
से लिया मूलभूत मूल्यों है कि बनाने के लिए एक संस्करण है। आप एक मूल्य की दुकान और किसी भी समय डिफ़ॉल्ट ओवरराइड हो सकता है:
scala> import collection.immutable.{Map => IMap}
//import collection.immutable.{Map=>IMap}
scala> import collection.mutable.HashMap
//import collection.mutable.HashMap
scala> val iMap = IMap(1 -> "one", 2 -> "two")
//iMap: scala.collection.immutable.Map[Int,java.lang.String] = Map((1,one), (2,two))
scala> val mMap = new HashMap[Int,String] {
| override def default(key: Int): String = iMap(key)
| }
//mMap: scala.collection.mutable.HashMap[Int,String] = Map()
scala> mMap(1)
//res0: String = one
scala> mMap(2)
//res1: String = two
scala> mMap(3)
//java.util.NoSuchElementException: key not found: 3
// at scala.collection.MapLike$class.default(MapLike.scala:223)
// at scala.collection.immutable.Map$Map2.default(Map.scala:110)
// at scala.collection.MapLike$class.apply(MapLike.scala:134)
// at scala.collection.immutable.Map$Map2.apply(Map.scala:110)
// at $anon$1.default(<console>:9)
// at $anon$1.default(<console>:8)
// at scala.collection.MapLike$class.apply(MapLike.scala:134)....
scala> mMap(2) = "three"
scala> mMap(2)
//res4: String = three
चेतावनी (रेक्स केर द्वारा टिप्पणी देखें):
: आप तत्वों अपरिवर्तनीय नक्शे से आ रही दूर करने के लिए सक्षम नहीं होगाscala> mMap.remove(1)
//res5: Option[String] = None
scala> mMap(1)
//res6: String = one
यह कुछ मामलों में उपयोगी है, लेकिन ध्यान दें कि आप अपने नए मानचित्र में मौजूद तत्व को निकालने में असमर्थ हैं जो आपके डिफ़ॉल्ट मानचित्र में मौजूद था; आप केवल डिफ़ॉल्ट को कवर और उजागर कर सकते हैं। –
सही, यह समाधान आंशिक है। –
सबसे साफ तरीका mutable.Map
varargs कारखाना का उपयोग करना होगा। ++
दृष्टिकोण के विपरीत, इस CanBuildFrom
तंत्र का उपयोग करता है, और इसलिए की क्षमता है और अधिक कुशल होने के लिए करता है, तो पुस्तकालय कोड इस का लाभ लेने के लिए लिखा गया था:
val m = collection.immutable.Map(1->"one",2->"Two")
val n = collection.mutable.Map(m.toSeq: _*)
यह काम करता है क्योंकि एक Map
भी एक दृश्य के रूप में देखी जा सकती है जोड़े के
क्या आप समझा सकते हैं, पैरामीटर पास करते समय दूसरी पंक्ति में आप किस वाक्यविन्यास का उपयोग करते हैं? कोलन क्या करता है? – Heinzi
': _ *' टाइप प्रकार की तरह है, संकलक को बताता है कि किसी दिए गए अभिव्यक्ति के लिए वास्तव में किस प्रकार का प्रतीक है। आप यहां इस बारे में सोच सकते हैं कि "यह अनुक्रम लें, और इसे कई vararg पैरा के रूप में देखें।" –
संग्रह पुस्तकालयों में कुछ गड़बड़ है यदि यह सबसे साफ है;) – matanster
- 1. एक अपरिवर्तनीय मैप
- 2. डेटा में मैप। मैप कार्यान्वयन?
- 3. मैप
- 4. मैं क्लोजर में मैक्रो कैसे मैप कर सकता हूं?
- 5. मैं डैपर को मैप करने के लिए कैसे प्राप्त कर सकता हूं। डेटटाइम को डेटटाइम 2?
- 6. मैं विम में कुछ करने के लिए Ctrl-TAB कैसे मैप कर सकता हूं?
- 7. हैश मैप
- 8. स्ट्रक्चर मैप
- 9. कैसे मैप करने के लिए एक स्ट्रिंग [] हाइबरनेट में
- 10. हैश मैप
- 11. मैप कुंजी
- 12. हैश मैप
- 13. मैप व्यू
- 14. मैप व्यू
- 15. हैश मैप
- 16. हैश मैप
- 17. स्ट्रक्चर मैप
- 18. स्ट्रक्चर मैप
- 19. हैश मैप
- 20. हैश मैप
- 21. हैश मैप
- 22. मैप व्यू
- 23. Compojure: क्वेरी मैप करने के लिए कैसे पैरामीटर
- 24. ट्रांसएक्शनल मैप बनाम सिंक्रनाइज़मैप
- 25. मैप पर एनोटेशन की संख्या कैसे कम कर सकता हूं?
- 26. इंटरेक्टिव वर्ल्ड मैप
- 27. पायथन: अंतराल से मूल्यों को मैप करने के लिए
- 28. हैश मैप प्रतिलिपि व्यवहार मैं
- 29. जावा हैश मैप से एक अपरिवर्तनीय संग्रह कैसे प्राप्त करें?
- 30. मैं एक हाइबरनेट-मैप किए गए सेट को एक अपरिवर्तनीय सेट के रूप में कैसे लोड कर सकता हूं?
क्या आप जानते हैं कि टोपी एसिम्प्टोटिक समय जटिलता है? मुझे पता है कि क्लोजर अपने किसी भी लगातार संग्रह को "क्षणिक" में बदल सकता है (यानी रैखिक रूप से टाइप किए गए उत्परिवर्तन कार्यों के साथ एक उत्परिवर्तनीय) और वापस 'ओ (1)' चरणों में लगातार एक में बदल सकता है। यह * ओ (एन) 'होने के लिए दिखता है, हालांकि यह निश्चित रूप से इस बात पर निर्भर करता है कि' ++ 'के कार्यान्वयन को कितना चालाक है। –
@ जोर्ग - मुझे पूरा यकीन है कि यह एक 'ओ (एन) 'है। सीमा में जब आप सबकुछ बदलते हैं, तो यह 'ओ (एन)' होना चाहिए, हालांकि आप समय बचाने के लिए नई प्रतिलिपि के निर्माण को स्थगित करने का प्रयास कर सकते हैं, या आप मूल मानचित्र के बजाय परिवर्तनों को पढ़कर अपने एक्सेस समय को दोगुना कर सकते हैं। कौन सा सबसे अच्छा प्रदर्शन करता है शायद आपके उपयोग के मामले पर निर्भर करता है। –
@ रुस्तम - मानचित्र अनियंत्रित हैं। वे जो भी आदेश महसूस करते हैं, वे दिखाई देंगे (हैश मानचित्र के साथ, यह आमतौर पर हैश कुंजी का क्रम है)। विशेष रूप से, अपरिवर्तनीय मानचित्रों में वास्तव में छोटे नक्शे के लिए विशेष मामले होते हैं जो परिवर्तनीय मानचित्रों से अलग होते हैं। –