2014-10-26 12 views
14

मैं कोटलिन में एक आलसी सूची कैसे सरल तरीके से प्राप्त कर सकता हूं? (उदाहरण के लिए, आलसी आलसी सूची)। मैं आधिकारिक दस्तावेज़ीकरण की मांग कर रहा हूं, मैं बिना किसी परिणाम के इसके लिए गुगल रहा हूं। हो सकता है कि मैंने पाया है कि सबसे अच्छा ट्यूटोरियल यह है: enter link description here, लेकिन मुझे आश्चर्य है कि ऐसा करने के लिए और अधिक "कोटलिन मूल तरीका" है, या मुझे इसे अपने द्वारा दिए गए लिंक के साथ स्वयं लागू करना होगा।कोटलिन में आलसी सूची?

मैं Kotlin की आधिकारिक ब्लॉग पर निम्नलिखित, हालांकि मैं एक आइटम प्राप्त करने में असमर्थ था, पूर्णांकों के साथ [3] उदाहरण

var i = 0 
integers = iterate{i++} 

integers[3] // does not work 
integers drop 3 // works 
+0

ऐसा लगता है कि इटारेट को बहिष्कृत किया गया है, लेकिन मैं फंक्शन स्ट्रीम के लिए स्ट्रीम स्ट्रीम भी कर सकता हूं (प्रारंभिक वैल्यू, क्लोजरफॉरनेक्स्ट)। ब्रैकेट ऑपरेटर के लिए, मैं अपनी स्ट्रीम को कक्षा में लपेट सकता हूं और एक प्राप्त (इंडेक्स) विधि लागू करता हूं। इस तरह के रूप में सरल। मेरे अनुसार, मैं इस प्रश्न को "सहेज" सकता था। – loloof64

+0

संभावित कॉलप्लिन [कोटलिन में अनंत अनुक्रम की रिकर्सिव परिभाषा] (http://stackoverflow.com/questions/35142548/recursive-definition-of-infinite-sequence-in-kotlin) – Vadzim

+2

नहीं। मेरे प्रश्न से पहले पूछा गया था। – loloof64

उत्तर

16

आप सही तरीके से मनाया के रूप में के लिए मिल गया है, sequenceOf (streamOf() पुराने संस्करणों में) संख्याओं की आलसी धारा पाने का तरीका है। हास्केल के विपरीत, कोटलिन की मानक लाइब्रेरी में आलसी सूची जैसी कोई चीज़ नहीं है, और एक अच्छे कारण के लिए: हास्केल दुनिया और जावा दुनिया में "सूची" का प्राथमिक अर्थ अलग है। हास्केल में, एक सूची मुख्य रूप से एक लिंक्ड सूची है, जो सिर और पूंछ की एक जोड़ी है, और मुख्य ऑपरेशन ऐसी सूची का मुखिया ले रहा है, जो आलसी रूप से कुशलतापूर्वक कार्यान्वित करने के लिए सरल है। कोटलिन/जावा में, सूची एक डेटा संरचना है जिसमें इसके तत्वों के लिए यादृच्छिक पहुंच है, और मुख्य ऑपरेशन get(int) है, जिसे आलसी रूप से कार्यान्वित किया जा सकता है, लेकिन इसका प्रदर्शन अक्सर उपयोगकर्ता के लिए आश्चर्यजनक होगा।

तो, कोटलिन आलस्य के लिए धाराओं का उपयोग करता है, क्योंकि जब आलसी संग्रह के मुख्य उपयोग मामलों की बात आती है तो वे अच्छे होते हैं: पुनरावृत्ति, फ़िल्टरिंग, मैपिंग और यादृच्छिक पहुंच अक्सर सामना करने की संभावना नहीं है।

जैसा कि आप, फिर से, सही ढंग से निरीक्षण करते हैं, drop आपको इंडेक्स द्वारा तत्वों तक पहुंचने देता है, जो प्रदर्शन प्रभाव को कोड में अधिक स्पष्ट बनाता है।

बीटीडब्ल्यू, आलसी सूचियों के लिए आपका उपयोग केस क्या है?

+0

मैं उच्च आदेश फ़ंक्शन को संसाधित करने के लिए आलसी सूचियों का उपयोग कर रहा हूं, जो फिबोनासी संख्याओं की गणना करता है। तो मैं इस fibonacci अनुक्रम के साथ आगे जा सकते हैं: उदाहरण के लिए संख्याओं की संख्या भी। – loloof64

+10

जावा 8 स्ट्रीम के साथ संघर्ष से बचने के लिए कोटलिन में स्ट्रीम को 'अनुक्रम' के साथ बदल दिया गया है। 'अनुक्रम ओएफ' के साथ 'streamOf' के संदर्भ या अनुक्रम' के रूप में अनुक्रम ' –

+0

डॉक्स: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/ – Vadzim