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.