मैं कोटलिन में Sequence सीखने की कोशिश कर रहा हूं।

मान लें कि मैं उपज विवरण के साथ एक स्ट्रिंग के सभी सबस्ट्रिंग का अनुक्रम प्राप्त करना चाहता हूं। मैं समझता हूं कि दाएं और बाएं सीमाओं के साथ दो नेस्टेड लूप के साथ ऐसा कैसे करें।

ऐसा लगता है कि लूप के बजाय अनुक्रम या नेस्टेड अनुक्रमों की एक जोड़ी का उपयोग करने का एक प्रभावी तरीका है। लेकिन मैं यह नहीं समझ सकता कि इसे कैसे किया जाए।

अनुक्रम का उपयोग करके स्ट्रिंग से सभी सबस्ट्रिंग कैसे प्राप्त करें? धन्यवाद

0
mazzy 15 अप्रैल 2021, 19:07

2 जवाब

सबसे बढ़िया उत्तर

सच कहूं तो मुझे नहीं पता कि सबसे कारगर तरीका क्या है। और मैं सिर्फ लूप के लिए उपयोग करूंगा। लेकिन यहाँ इस समस्या का मेरा समाधान है, शायद यह आपको अनुक्रमों और कोड लिखने की इस शैली को समझने में मदद करेगा:

यहाँ यह खेल का मैदान पर है

fun String.substrings() =
        indices.asSequence().flatMap { left ->
            (left + 1..length).asSequence().map { right -> substring(left, right) }
        }
2
Furetur 15 अप्रैल 2021, 17:42

अनुक्रम विशेष रूप से कुशल नहीं हैं, प्रत्येक के लिए ओवरहेड का एक गुच्छा शामिल है - उनकी मुख्य ताकत प्रत्येक तत्व को एक समय में संचालन की पूरी श्रृंखला के माध्यम से पारित करने में सक्षम है।

इसका मतलब है कि आपको प्रत्येक मध्यवर्ती चरण (कम मेमोरी उपयोग) के लिए तत्वों का एक नया संग्रह बनाने की आवश्यकता नहीं है, आप एक परिणाम खोजने के बाद पहले समाप्त कर सकते हैं, और अनुक्रम अनंत हो सकते हैं। फिर भी, वे सामान्य सूची संस्करण की तुलना में धीमे हो सकते हैं, यह इस बात पर निर्भर करता है कि आप किसके साथ काम कर रहे हैं।

कुछ for लूप और yieldआईएनजी आइटम का उपयोग करके संभवत: सबसे कुशल अनुक्रम वह है जो आप कर रहे हैं। लेकिन अगर आपका मतलब "कुशल" है जैसे "लूप के लिए लिखने के बजाय मानक पुस्तकालय का उपयोग करना" तो @ फ़्यूचर का जवाब ऐसा करने का एक तरीका है, या आप इस तरह स्लाइडिंग विंडो का उपयोग कर सकते हैं:

val stuff = "12345"
val substrings = with(stuff) {
    indices.asSequence().flatMap { i ->
        windowedSequence(length - i)
    }    
}
print(substrings.toList())

>>>>[12345, 1234, 2345, 123, 234, 345, 12, 23, 34, 45, 1, 2, 3, 4, 5]

मूल रूप से हर संभव सबस्ट्रिंग लंबाई के लिए windowed (partialWindows=false के डिफ़ॉल्ट के साथ) का उपयोग करके, length से 1 तक, हर चीज के अनुक्रम संस्करणों का उपयोग करते हुए

2
cactustictacs 15 अप्रैल 2021, 18:23