जवाबों:
Enumerable.Range(0, 11);
एक निर्दिष्ट सीमा के भीतर अभिन्न संख्याओं का एक क्रम उत्पन्न करता है।
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
आप एक साधारण फ़ंक्शन बना सकते हैं। यह अधिक जटिल अनुक्रम के लिए काम करेगा। नहीं तो Enumerable.Range
क्या करना चाहिए।
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
OddSequence
EvenSequence
कर रहा था या अन्य कस्टम रेंज। if (++n1 % 2 == 0) yield return n1
, उदाहरण के लिए। कुछ ही दिन हुए हैं;)
शायद ही कभी अनुक्रमित अधिभार (i) के साथ Linq प्रक्षेपण :
(new int[11]).Select((o,i) => i)
मैं इस विधि को इसके फ्लेक्सिबिल्टी के लिए पसंद करता हूं।
उदाहरण के लिए, अगर मैं चाहूं तो:
(new int[11]).Select((item,i) => i*2)
या अगर मुझे एक घंटे की 5 मिनट की वेतन वृद्धि चाहिए:
(new int[12]).Select((item,i) => i*5)
या तार:
(new int[12]).Select((item,i) => "Minute:" + i*5)
C # 8.0 में आप Indices और पर्वतमाला का उपयोग कर सकते हैं
उदाहरण के लिए:
var seq = 0..2;
var array = new string[]
{
"First",
"Second",
"Third",
};
foreach(var s in array[seq])
{
System.Console.WriteLine(s);
}
// Output: First, Second
या यदि आप बनाना चाहते हैं IEnumerable<int>
तो आप एक्सटेंशन का उपयोग कर सकते हैं:
public static IEnumerable<int> ToEnumerable(this Range range)
{
for (var i = range.Start.Value; i < range.End.Value; i++)
{
yield return i;
}
}
...
var seq = 0..2;
foreach (var s in seq.ToEnumerable())
{
System.Console.WriteLine(s);
}
// Output: 0, 1
पुनश्च लेकिन 'अंत से अनुक्रमित' के साथ सावधान रहें । उदाहरण के लिए, ToEnumerable विस्तार विधि के साथ काम नहीं कर रहा है var seq = ^2..^0
।
मूल रूप से यहाँ जवाब दिया ।
यदि आप एक चर IEnumerable<int>
से संख्याओं ( ) का अनुक्रम दोहराना चाहते हैं , तो प्रयास करें0
end
Enumerable.Range(0, ++10);
स्पष्टीकरण में, 0 से 10 तक संख्याओं का क्रम प्राप्त करने के लिए, आप 0 पर शुरू होने वाले क्रम को याद रखना चाहते हैं (यह याद रखते हुए कि 0 और 10 के बीच 11 संख्याएँ हैं, समावेशी)।
यदि आप एक असीमित रैखिक श्रृंखला चाहते हैं, तो आप एक फ़ंक्शन लिख सकते हैं
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
while (true)
{
yield return k;
k = (c * k) + n;
}
}
जिसे आप पसंद कर सकते हैं
var ZeroTo1000 = Series().Take(11);
यदि आप एक फ़ंक्शन चाहते हैं तो आप बार-बार कॉल कर सकते हैं वेतन वृद्धि संख्या उत्पन्न करने के लिए, शायद आप कुछ चाहते हैं।
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
जब आप कॉल Seq()
करेंगे तो यह अगला ऑर्डर नंबर लौटाएगा और काउंटर को बढ़ाएगा।
मेरे कोड में ये कार्य हैं
private static IEnumerable<int> FromZero(this int count)
{
if (count <= 0)
yield break;
for (var i = 0; i < count; i++)
{
yield return i;
}
}
private static IEnumerable<int> FromOne(this int count)
{
if (count <= 0)
yield break;
for (var i = 1; i <= count; i++)
{
yield return i;
}
}
यह (i) कोड के लिए कुछ कम करने में मदद करता है।
IEnumerable<int>
, तो कॉल शामिल करें.ToArray()
।