2015-05-28 8 views
7

कोटलिन में एक अपरिवर्तनीय List संपादित करने का सबसे अच्छा तरीका क्या है?कोटलिन संपादन सूची

मैं समझता हूँ कि List वास्तव में अपरिवर्तनीय नहीं है, लेकिन अगर मैं एक समारोह में में एक List गुजर रहा हूं और मुझे जरूरत है कि पूरी सूची शून्य से एक भी तत्व, उस को संभालने के लिए एक समर्थित तरीका है? अगर मैं उस संपूर्ण सूची को अतिरिक्त तत्व के साथ चाहता हूं तो क्या होगा?

उत्तर

12

यदि आप listOf("foo", "bar") पर कॉल करने के बजाय mutableListOf("foo", "bar") पर कॉल करने के बजाय MutableList का उदाहरण प्राप्त करने के बजाय स्वयं सूची बना रहे हैं।

यदि आपको सूची मिलती है, उदा। एक विधि के पैरामीटर के रूप में, पर एक म्यूटेबल कॉपी प्राप्त करने के लिए कॉल करें।

वैकल्पिक रूप से map() या filter() जैसे कई निर्मित विस्तार एक विधि का उपयोग modifed तत्वों के साथ एक नई सूची प्राप्त करने के। उदाहरण के लिए, पहले एन तत्वों के बिना सूची प्राप्त करने के लिए drop(n) का उपयोग करें। केवल पहले एन तत्व प्राप्त करने के लिए take(n) पर कॉल करें। Here आप अंतर्निहित विस्तार विधियों को और अधिक पा सकते हैं।

यदि आपको दो सूचियों में शामिल होने की आवश्यकता है, तो बस इस तरह प्लस ऑपरेटर का उपयोग करें: val newList = list1 + list2

नोट, कि आपकी विधियों के पैरामीटर सूचियों को संशोधित करना कोड गंध हो सकता है। यही कारण है कि सभी अंतर्निहित विधियां प्रतियां लौटती हैं। इसके अलावा अपने asumption

मैं समझता हूँ कि सूची वास्तव में अपरिवर्तनीय

गलत है नहीं है। जैसा कि आप here देख सकते हैं, मानक पुस्तकालय एक अपरिवर्तनीय खाली सूची लौटाएगा यदि आप बिना तर्क के listOf() पर कॉल करते हैं।

जावा में List इंटरफ़ेस प्रति डिफ़ॉल्ट पर परिवर्तनीय है जो अपरिवर्तनीय सूची को संशोधित करने का प्रयास करता है जैसे कि Arrays.asList() पर कॉल करके बनाया गया था। यही कारण है कि कोटलिन में विपरीत मामला है।

+2

यदि आपके पास एक ऐरेलिस्ट है, और आप इसे एक सूची के रूप में पास करते हैं, तो यह सूची वास्तव में अपरिवर्तनीय नहीं है। यही मेरा मतलब है कि यह वास्तव में अपरिवर्तनीय नहीं है। – spierce7

+0

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

+0

कोटलिन की सूची 'इंटरफ़ेस 'अपरिवर्तनीय' नहीं है बल्कि 'केवल पढ़ने के लिए' है ... कुछ के लिए छोटा अंतर, दूसरों के लिए बड़ा। 'MutableList 'स्पष्ट रूप से उत्परिवर्तनीय है। –

2

यदि आप अपरिवर्तनीय सूचियों से निपट रहे हैं, तो आप जो करना चाहते हैं वह नई सूचियां बना रहा है। तो आपके मामले में, यदि आप किसी तत्व के बिना सूची चाहते हैं, तो उस तत्व को फ़िल्टर करें (कोटलिन में आप फ़िल्टर फ़ंक्शन का उपयोग कर सकते हैं) और नई सूची वापस कर सकते हैं।