C# Language
iterators
खोज…
टिप्पणियों
एक पुनरावृत्ति एक विधि है, एक्सेसर या ऑपरेटर को प्राप्त करें, जो उपज कीवर्ड का उपयोग करके किसी सरणी या संग्रह वर्ग पर एक कस्टम पुनरावृत्ति करता है
सिंपल न्यूमेरिक इटरेटर उदाहरण
पुनरावृत्तियों के लिए एक सामान्य उपयोग-मामला संख्याओं के संग्रह पर कुछ ऑपरेशन करना है। नीचे दिए गए उदाहरण से पता चलता है कि कैसे संख्या के प्रत्येक तत्व को व्यक्तिगत रूप से कंसोल में प्रिंट किया जा सकता है।
यह संभव है क्योंकि सरणियाँ IEnumerable
इंटरफ़ेस को लागू करती हैं, जिससे क्लाइंट GetEnumerator()
विधि का उपयोग करके सरणी के लिए एक पुनरावृत्ति प्राप्त कर सकते हैं। यह विधि एक एन्यूमरेटर लौटाती है, जो कि सरणी में प्रत्येक संख्या पर एक रीड-ओनली, फॉरवर्ड-ओनली कर्सर है।
int[] numbers = { 1, 2, 3, 4, 5 };
IEnumerator iterator = numbers.GetEnumerator();
while (iterator.MoveNext())
{
Console.WriteLine(iterator.Current);
}
उत्पादन
1
2
3
4
5
यह भी संभव है कि foreach
स्टेटमेंट का उपयोग करके वही परिणाम प्राप्त करें:
foreach (int number in numbers)
{
Console.WriteLine(number);
}
यील्ड का उपयोग करके Iterators बनाना
Iterators enumerators का उत्पादन करते हैं । सी # में, एन्यूमरेटर्स का उत्पादन तरीकों, गुणों या अनुक्रमकों को परिभाषित करके किया जाता है जिसमें yield
कथन होते हैं।
अधिकांश तरीके सामान्य return
स्टेटमेंट के माध्यम से उनके कॉलर पर नियंत्रण return
, जो उस विधि के लिए सभी राज्य स्थानीय को डिस्पोज़ करता है। इसके विपरीत, yield
कथनों का उपयोग करने वाले तरीके स्थानीय मानों को उन मूल्यों को वापस करने के बीच स्थानीय राज्य को संरक्षित करते हुए अनुरोध पर कॉलर को कई मान वापस करने की अनुमति देते हैं। ये लौटे मान एक अनुक्रम का गठन करते हैं। पुनरावृत्तियों के भीतर दो प्रकार के yield
कथन का उपयोग किया जाता है:
yield return
, जो कॉल करने वाले पर नियंत्रण लौटाता है, लेकिन राज्य को संरक्षित करता है। जब इस नियंत्रण को वापस पारित किया जाता है तो कैली इस लाइन से निष्पादन जारी रखेगा।yield break
, जो सामान्यreturn
स्टेटमेंट के समान कार्य करता है - यह अनुक्रम के अंत को दर्शाता है। सामान्यreturn
स्टेटमेंट अपने आप में एक इटरेटर ब्लॉक के भीतर अवैध हैं।
यह उदाहरण नीचे एक पुनरावृत्ति विधि को प्रदर्शित करता है जिसका उपयोग फाइबोनैचि अनुक्रम उत्पन्न करने के लिए किया जा सकता है:
IEnumerable<int> Fibonacci(int count)
{
int prev = 1;
int curr = 1;
for (int i = 0; i < count; i++)
{
yield return prev;
int temp = prev + curr;
prev = curr;
curr = temp;
}
}
इसके बाद इस इटिलेटर का उपयोग फाइबोनैचि अनुक्रम के एक एन्यूमरेटर का उत्पादन करने के लिए किया जा सकता है जिसे कॉलिंग विधि द्वारा खाया जा सकता है। नीचे दिए गए कोड में दर्शाया गया है कि फाइबोनैचि अनुक्रम के भीतर पहले दस शब्दों को कैसे गणना किया जा सकता है:
void Main()
{
foreach (int term in Fibonacci(10))
{
Console.WriteLine(term);
}
}
उत्पादन
1
1
2
3
5
8
13
21
34
55