कस्टम Lazy अनुक्रम बनाना
अपने lazy-evaluated अनुक्रम बनाइए।
कस्टम Lazy अनुक्रम बनाना, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
कस्टम विलंबित अनुक्रम क्यों?
map और filter से आगे बढ़कर, आप अनंत जनरेटर या महँगे गणना-आधारित डेटा-प्रवाह जैसी चीज़ों के लिए अपने स्वयं के विलंबित रूप से मूल्यांकित अनुक्रम बना सकते हैं, जिन्हें आवश्यकता पड़ने पर चलना चाहिए।
LazySequence प्रकार
.lazy को कॉल करने पर संग्रह एक LazySequenceProtocol अनुरूप प्रकार में लिपट जाता है। आपके द्वारा जोड़ी गई संक्रियाएँ और अधिक विलंबित आवरण लौटाती हैं:
let view = [1, 2, 3].lazy
let mapped = view.map { $0 * 2 }
print(Array(mapped)) // [2, 4, 6] -- LazyMapSequenceखींचकर प्राप्त किया जाने वाला अनुक्रम
कस्टम अनुक्रम खींचकर प्राप्त किए जाते हैं: iterator को किया गया प्रत्येक कॉल अगला मान तभी गणना करता है जब उसकी माँग की जाए। यहाँ Fibonacci जनरेटर है:
struct Fibonacci: Sequence, IteratorProtocol {
var a = 0, b = 1
mutating func next() -> Int? {
let r = a
(a, b) = (b, a + b)
return r
}
}
print(Array(Fibonacci().prefix(6))) // [0, 1, 1, 2, 3, 5]अनंत, लेकिन विलंबित रूप से उपयोग किया गया
मान आवश्यकता पड़ने पर खींचे जाते हैं, इसलिए अनंत अनुक्रम सुरक्षित है, बशर्ते आप उसका सीमित हिस्सा लें:
struct Naturals: Sequence, IteratorProtocol {
var n = 1
mutating func next() -> Int? { defer { n += 1 }; return n }
}
print(Array(Naturals().prefix(4))) // [1, 2, 3, 4]LazySequenceProtocol का अनुरूप बनना
LazySequenceProtocol अपनाने से आपका अपना प्रकार map/filter के साथ भी विलंबित रूप से श्रृंखलाबद्ध हो सकता है:
struct Counter: Sequence, IteratorProtocol, LazySequenceProtocol {
var n = 0; let limit: Int
mutating func next() -> Int? {
guard n < limit else { return nil }
defer { n += 1 }
return n
}
}
print(Array(Counter(n: 0, limit: 3).map { $0 * 10 })) // [0, 10, 20]sequence(first:next:)
मानक लाइब्रेरी नया प्रकार बनाए बिना कस्टम विलंबित अनुक्रमों के लिए एक बिल्डर देती है:
let powers = sequence(first: 1) { $0 <= 16 ? $0 * 2 : nil }
print(Array(powers)) // [1, 2, 4, 8, 16, 32]sequence(state:next:)
चरणों के बीच अधिक समृद्ध स्थिति बनाए रखें:
let fibs = sequence(state: (0, 1)) { (s: inout (Int, Int)) -> Int? in
let r = s.0
s = (s.1, s.0 + s.1)
return r
}
print(Array(fibs.prefix(6))) // [0, 1, 1, 2, 3, 5]AnySequence आवरण
API दिखाते समय ठोस प्रकार को AnySequence के पीछे छिपाएँ:
func evens(upTo n: Int) -> AnySequence<Int> {
AnySequence((0...n).lazy.filter { $0 % 2 == 0 })
}
print(Array(evens(upTo: 8))) // [0, 2, 4, 6, 8]विलंबित गणना वाला डेटा-प्रवाह
हर तत्व के वास्तव में उपयोग किए जाने तक महँगा काम टाल दें:
let stream = (1...5).lazy.map { (n: Int) -> Int in
print("computing \(n)")
return n * n
}
print(stream.first!) // computing 1, then 1जनरेटर को रोकना
अनुक्रम को सही ढंग से समाप्त करने के लिए next() से nil लौटाएँ:
let countdown = sequence(state: 3) { (s: inout Int) -> Int? in
guard s > 0 else { return nil }
defer { s -= 1 }
return s
}
print(Array(countdown)) // [3, 2, 1]सबको एक साथ जोड़ना
माँग पर चलने वाली प्रसंस्करण-श्रृंखला के लिए कस्टम जनरेटर को विलंबित ऑपरेटरों के साथ जोड़ें:
let primesIsh = sequence(first: 2) { $0 < 20 ? $0 + 1 : nil }
.lazy
.filter { n in (2..<n).allSatisfy { n % $0 != 0 } }
print(Array(primesIsh)) // [2, 3, 5, 7, 11, 13, 17, 19]त्वरित जाँच
कस्टम IteratorProtocol अनुक्रम के अंत का संकेत क्या देता है?
पुनरावलोकन
आपने कस्टम विलंबित अनुक्रम सीखे:
.lazyसेLazySequenceProtocolआवरण बनते हैंSequence+IteratorProtocolलागू करें; रोकने के लिएnext()सेnilलौटाएँ- त्वरित बिल्डर के रूप में
sequence(first:next:)/sequence(state:next:)का उपयोग करें - ठोस प्रकारों को छिपाने के लिए
AnySequenceमें लपेटें
पाठ्यक्रम पूरा हुआ! अगला विषय: closures का गहन अध्ययन।
एआई शिक्षक के साथ Swift सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 122
- पाठ
- 409
अक्सर पूछे जाने वाले प्रश्न
क्या “कस्टम Lazy अनुक्रम बनाना” पाठ निःशुल्क है?
हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कस्टम Lazy अनुक्रम बनाना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कस्टम Lazy अनुक्रम बनाना” में मैं क्या सीखूँगा?
अपने lazy-evaluated अनुक्रम बनाइए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“कस्टम Lazy अनुक्रम बनाना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- lazy प्रॉपर्टी
- lazy map और filter
- Lazy बनाम Eager: लाभ और समझौते
- कस्टम Lazy अनुक्रम बनाना