5 Stimmen

Wege in .NET, um ein Array von int von 0 bis n zu erhalten

Ich bin auf der Suche nach dem Weg (s), um ein Array mit Zahlen von 0 bis eine zufällige füllen. Zum Beispiel von 0 bis 12 oder 1999, etc.

Natürlich gibt es eine for -Schleife:

var arr = int[n];
for(int i = 0; i < n; i++)
{
  arr[i] = i;
}

Und ich kann diese Methode zu einer Erweiterung für Array Klasse. Aber gibt es noch interessantere Möglichkeiten?

32voto

Chris Shaffer Punkte 31499

Dies existiert bereits (gibt IEnumerable zurück, aber das ist leicht genug zu ändern, wenn Sie benötigen):

arr = Enumerable.Range(0, n);

7voto

configurator Punkte 39516

Der interessanteste Weg führt meiner Meinung nach nicht zu einem Array, sondern zu einem IEnumerable<int> die dieselbe Zahl aufzählt - sie hat den Vorteil von O(1) Einrichtungszeit, da sie die Ausführung der eigentlichen Schleife aufschiebt:

public IEnumerable<int> GetNumbers(int max) {
    for (int i = 0; i < max; i++)
        yield return i;
}

Diese Schleife durchläuft alle Zahlen von 0 a max-1 und gibt sie nacheinander zurück - aber sie durchläuft die Schleife nur, wenn Sie sie tatsächlich brauchen.

Sie können dies auch verwenden als GetNumbers(max).ToArray() um ein 'normales' Array zu erhalten.

1voto

Tim Long Punkte 13230

Die beste Antwort hängt davon ab, warum Sie das Array benötigen. Die Sache ist die, dass der Wert eines jeden Array-Elements gleich dem Index ist, so dass der Zugriff auf ein beliebiges Element im Grunde eine redundante Operation ist. Warum nicht eine Klasse mit einem Indexer verwenden, der nur den Wert des Indexes zurückgibt? Es wäre nicht von einem echten Array zu unterscheiden und würde auf jede Größe skalieren, außer dass es keinen Speicher und keine Zeit zum Einrichten benötigen würde. Aber ich habe das Gefühl, dass es Ihnen nicht um Geschwindigkeit und Kompaktheit geht. Vielleicht wird eine bessere Lösung offensichtlicher, wenn Sie das Problem genauer beschreiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X