2011-02-23 30 views

उत्तर

25

scala.Listअपरिवर्तनीय है, जिसका अर्थ है कि आप इसे स्थान पर अपडेट नहीं कर सकते हैं। आप अपनी सूची की एक प्रति जो अद्यतन मानचित्रण शामिल बनाना चाहते हैं, तो आप निम्न कर सकते हैं:

val updated = l2.updated(2, 55) 

वहाँ अस्थायी आदेश दिया अनुक्रम प्रकार ऐसे भी हैं, scala.collection.mutable में, इस तरह के रूप Buffer प्रकार जो और अधिक लग रहे हैं आप क्या चाहते हैं की तरह।

scala> import scala.collection._ 
import scala.collection._ 
scala> val b = mutable.Buffer(1,2,3) 
b: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3) 
scala> b(2) = 55 
scala> b 
res1: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 55) 

संपादित करें:: आप निम्नलिखित की कोशिश यदि आप अधिक सफलता मिलनी चाहिए बस ध्यान दें कि कुछ अन्य उत्तर उल्लेख किया है कि आप एक "अस्थायी सूची प्रकार" का उपयोग करना चाहिए - यह सच है, लेकिन "सूची" स्काला में सिर्फ एकल-लिंक्ड सूची को संदर्भित करता है, जबकि जावा में यह आमतौर पर किसी भी आदेशित, यादृच्छिक-अभिगम संग्रह के लिए उपयोग किया जाता है। वहाँ भी एक DoubleLinkedList जो अधिक एक जावा LinkedList, और एक MutableList है, जो एक प्रकार कुछ अन्य प्रकार के आंतरिक भागों के लिए इस्तेमाल किया है की तरह है, है।

सामान्यतया क्या आप शायद स्काला में चाहते हैं इस काम के लिए एक Buffer है; खासकर जब से डिफ़ॉल्ट कार्यान्वयन ArrayBuffer है, जो जावा में अधिकांश लोगों के डिफ़ॉल्ट, ArrayList के समान होने के करीब है।

यदि आप कभी भी यह जानना चाहते हैं कि स्कैला दुनिया में जावा संग्रह इंटरफ़ेस का सबसे नज़दीकी "मैपिंग" क्या है, तो सबसे आसान काम यह है कि शायद JavaConversions करता है। इस मामले में आप देख सकते हैं मानचित्रण Buffer के लिए है:

scala.collection.mutable.Buffer <=> java.util.List 
+0

यह करेगा, धन्यवाद वैल अपडेट = l2।अपडेट किया गया (2, 55) – Ska

2

आपकी समस्या यह है कि स्केला में सूचियाँ अपरिवर्तनीय हैं, आप के बजाय एक परिवर्तनशील सूची का उपयोग करने की जरूरत है। आयात scala.collection.mutable.Queue और इसके बजाय इसका उपयोग करें। कतार एक MutableList है, तो यह वही करना चाहिए जो आप चाहते हैं।

+0

परिवर्तनशील संरचना का उपयोग करने के लिए आवश्यक है ऊपर, विधि अपडेट की गई रिटर्न दिया तत्व के साथ एक सूची की नकल की जगह –

2

जो सूची आप बना रहे हैं वह अपरिवर्तनीय है।

scala> val l = List(1,2,3) 
l: List[Int] = List(1, 2, 3) 
scala> l.getClass 
res3: java.lang.Class[_] = class scala.collection.immutable.$colon$colon 

बजाय एक परिवर्तनशील सूची का उपयोग करें और आप ठीक होना चाहिए।

+0

धन्यवाद दोनों के लिए लेकिन यह नहीं होगा क्योंकि मैं मौजूदा एपीआई के साथ काम कर रहा हूं जिसमें अपरिवर्तनीय सूची है। मुझे लगता है कि मुझे पूरी सूची को पुनर्स्थापित करने की जरूरत है। – Ska

2

लेकिन आप एक अंतर्निहित में काम लपेट यदि आप पसंद नहीं करते updated

implicit class RichList[A](l: List[A]) { 
     def update(which: Int, what: A): List[A] = { 
     l.updated(which, what) 
     } 
} 

val l = List(1, 2, 3) 
val l2 = l(2) = 3 

List(1, 3, 3) 
-1

सूचियाँ स्केला में अडिग हैं कर सकते हैं। लेकिन आप की तरह "अद्यतन" विधि एक सूची आप उपयोग कर सकते हैं में एक तत्व को बदलने के लिए चाहते हैं तो इस

val num:List[Int]=List(1,5,4,7,8,2,10) 
num=num.updated(0,22) 

के बाद से सूचियाँ अपरिवर्तनीय हैं, यह पहली सूची संख्या कहा जाता है एक कॉपी बन जाती (जैसा कि हम करने के लिए नई सूची सौंपा के रूप में कैलम द्वारा नोट genaral विधि अपडेट की गई 22.So को 0 तत्व की जगह 'संख्या'),

listname.updated(index,value) 
नहीं
+2

हालांकि हम आपके उत्तर के लिए धन्यवाद करते हैं, यह बेहतर होगा अगर यह अन्य उत्तरों के शीर्ष पर अतिरिक्त मूल्य प्रदान करता है। इस मामले में, आपका उत्तर अतिरिक्त मूल्य प्रदान नहीं करता है, क्योंकि किसी अन्य उपयोगकर्ता ने पहले से ही उस समाधान को पोस्ट किया है। यदि कोई पिछला उत्तर आपके लिए उपयोगी था, तो आपको उसी जानकारी को दोहराने के बजाय इसे वोट देना चाहिए। –

+0

क्षमा करें, यह स्टैक ओवरफ्लो में मेरा पहला जवाब है। मैंने लिखा है कि मैंने "अपडेटेड" विधि पर क्या समझा है और मैंने सोचा कि यह दूसरों के लिए उपयोगी होगा और मुझे दोहराने का कोई विचार नहीं था। एक बार फिर दोहराने के लिए खेद है –

संबंधित मुद्दे