Antworten:
Enumerable.Range(0, 11);
Erzeugt eine Folge von Integralzahlen innerhalb eines bestimmten Bereichs.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
Sie können eine einfache Funktion erstellen. Dies würde für eine kompliziertere Sequenz funktionieren. Ansonsten Enumerable.Range
sollte das reichen.
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
OddSequence
EvenSequence
andere benutzerdefinierte Bereiche nachgedacht . if (++n1 % 2 == 0) yield return n1
, zum Beispiel. Es ist ein paar Tage her;)
Linq-Projektion mit der selten verwendeten Indexerüberladung (i) :
(new int[11]).Select((o,i) => i)
Ich bevorzuge diese Methode wegen ihrer Flexibilität.
Zum Beispiel, wenn ich Abend will:
(new int[11]).Select((item,i) => i*2)
Oder wenn ich 5-Minuten-Schritte einer Stunde möchte:
(new int[12]).Select((item,i) => i*5)
Oder Zeichenfolgen:
(new int[12]).Select((item,i) => "Minute:" + i*5)
In C # 8.0 können Sie Indizes und Bereiche verwenden
Beispielsweise:
var seq = 0..2;
var array = new string[]
{
"First",
"Second",
"Third",
};
foreach(var s in array[seq])
{
System.Console.WriteLine(s);
}
// Output: First, Second
Oder wenn Sie erstellen möchten, IEnumerable<int>
können Sie die Erweiterung verwenden:
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
PS Aber seien Sie vorsichtig mit 'Indizes von Ende' . Beispielsweise funktioniert die ToEnumerable-Erweiterungsmethode nicht mit var seq = ^2..^0
.
Ursprünglich hier beantwortet .
Wenn Sie eine Folge von Zahlen ( IEnumerable<int>
) 0
bis zu einer Variablen auflisten möchten end
, versuchen Sie es
Enumerable.Range(0, ++10);
Um eine Folge von Zahlen von 0 bis 10 zu erhalten, soll die Folge bei 0 beginnen (wobei zu beachten ist, dass es 11 Zahlen zwischen 0 und 10 einschließlich gibt).
Wenn Sie eine unbegrenzte lineare Reihe wünschen, können Sie eine Funktion wie schreiben
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
while (true)
{
yield return k;
k = (c * k) + n;
}
}
was du gerne gebrauchen könntest
var ZeroTo1000 = Series().Take(11);
Wenn Sie eine Funktion möchten, die Sie wiederholt aufrufen können, um inkrementelle Nummern zu generieren, möchten Sie vielleicht etwas Ähnliches.
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
Wenn Sie anrufen Seq()
, wird die nächste Bestellnummer zurückgegeben und der Zähler erhöht.
Ich habe diese Funktionen in meinem Code
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;
}
}
Dies hilft, einige für (i) Code zu reduzieren.
IEnumerable<int>
, schließen Sie einen Aufruf ein.ToArray()
.