Auffüllen einer Liste von Ganzzahlen in .NET

74

Ich benötige eine Liste von Ganzzahlen von 1 bis x, wobei x vom Benutzer festgelegt wird. Ich könnte es mit einer for-Schleife erstellen, z. B. unter der Annahme, dass x eine zuvor festgelegte Ganzzahl ist:

List<int> iList = new List<int>();
for (int i = 1; i <= x; i++)
{
    iList.Add(i);
}

Dies scheint dumm zu sein, sicherlich gibt es einen eleganteren Weg, dies zu tun, so etwas wie die PHP-Range-Methode

Glenn Slaven
quelle

Antworten:

94

Wenn Sie .Net 3.5 verwenden, benötigen Sie Enumerable.Range .

Erzeugt eine Folge von Integralzahlen innerhalb eines bestimmten Bereichs.

jfs
quelle
3
Dies gibt einen IEnumerable <int> zurück, keinen List <int>. Wie aku bemerkt hat, möchten Sie .ToList () beim Aufruf von Enumerable.Range (x, y) aufrufen.
Daniel Jennings
1
Es ist im Allgemeinen besser, IEnumerable <> zu verwenden, wo immer dies möglich ist, um die größtmögliche Flexibilität zu gewährleisten. Besonders wenn sich diese Liste nicht ändert, muss es höchstwahrscheinlich keine generische Liste sein <T>
Simon_Weaver
Warum ist eine Bereichsmethode eleganter als nur eine einfache for-Schleife, wobei die Bedingung das Maximum ist?
Jakub Keller
1
IMHO ist es ziemlich offensichtlich, dass var List = new List <int> (Max - Min); für (var Index = Min; Index <Max; ++ Index) List.Add (Index); ist nicht elegant wie Enumerable.Range (Min, Max);
Massimiliano Carosi
45

LINQ zur Rettung:

// Adding value to existing list
var list = new List<int>();
list.AddRange(Enumerable.Range(1, x));

// Creating new list
var list = Enumerable.Range(1, x).ToList();

Siehe Generierungsoperatoren auf LINQ 101

aku
quelle
17

Ich bin einer von vielen, hat gebloggt über einen Rubin-esque zu Extension - Methode , dass Sie schreiben können , wenn Sie C # 3.0 mit:


public static class IntegerExtensions
{
    public static IEnumerable<int> To(this int first, int last)
    {
        for (int i = first; i <= last; i++)
{ yield return i; } } }

Dann können Sie Ihre Liste von Ganzzahlen wie folgt erstellen

List<int> = first.To(last).ToList();

oder

List<int> = 1.To(x).ToList();

Samuel Jack
quelle
1
Die anderen Antworten sind wahrscheinlicher, wonach der Fragesteller gesucht hat, aber ich habe hier abgestimmt, weil mir die resultierende Syntax gefällt. Wie viel lesbarer können Sie sein als "1.To (10)"?
Jay Bazuzi
0

Hier ist eine kurze Methode, die eine Liste von Ganzzahlen zurückgibt.

    public static List<int> MakeSequence(int startingValue, int sequenceLength)
    {
        return Enumerable.Range(startingValue, sequenceLength).ToList<int>();
    }
Gaspare Bonventre
quelle