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

Antworten:


94

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

Erzeugt eine Folge von Integralzahlen innerhalb eines bestimmten Bereichs.


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


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();


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>();
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.