Wie können Sie reverse traverse durch ein C# - Kollektion?
Ist es möglich, ein foreach
- Anweisung, wird die traverse über ein Collections-Objekt in umgekehrter Reihenfolge?
Wenn nicht ein foreach
- Anweisung, gibt es einen anderen Weg?
Kriecherei in die Kommentare und Antworten in diesem thread. Reverse() ist nicht ein Ersatz für eine for () - Schleife hat O(n) Speicherplatz. Die LINQ-black box kann gefährlich sein.
Falsch.
wo? Ich sehe es nicht.
Ich nehme das zurück; es nicht. Ich Frage mich, warum.
Falsch.
Reverse
verwenden IList
wenn verfügbar.wo? Ich sehe es nicht.
Ich nehme das zurück; es nicht. Ich Frage mich, warum.
InformationsquelleAutor Sam F | 2010-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie mit einem normalen
for
Schleife rückwärts wie diese:Können Sie auch die LINQ:
Jedoch die normale
for
Schleife wird wahrscheinlich ein wenig schneller.for
Schleife kann schneller sein, aber die LINQ ist sicherlich klarer. Ich würde daher lieber die LINQ-version.F. Nein, Sie sind es nicht! 🙂
Die Iteration rückwärts in eine for-Schleife ist irgendwie "unklar"? Wirklich?
Benutzername ist genial. Ich Liebe die Tatsache, dass jeder Adresse, die Sie als "Hey, idiot"
In diesem Alter von Iteratoren und LINQ for-Schleifen scheinen geradezu antiquiert.
InformationsquelleAutor SLaks
Könnte man nur nennen Reverse() auf die Sammlung.
F: Es ist ein Methode auf jeden
IEnumerable<T>
(dieCollection<T>
), ab .NET 3.5 an. Siehe hier für eine Liste aller von Ihnen. Wenn Sie verwenden .NET 3.5 oder höher, die Sie gerade brauchen, um hinzuzufügenusing System.Linq;
an den Anfang der Datei.Ich glaube, ich sollte hinzufügen, eine Notiz - verwirrend genug, Reverse() hat eine andere Bedeutung für die IList - <T>, als es bei den standard IEnumerable<T>. IList<T>.Reverse() gibt void zurück, so in Ordnung für mein snippet zu arbeiten, müsste man sagen-Sammlung.AsEnumerable().Reverse(). Verwirrend Geschäft.
48klocs, können Sie den Kommentar-Antwort in die richtige Antwort....? (die AsEnumerable()). Ich fast aufgegeben, auf dem geschrieben-Antwort, bevor ich Lesen Sie die Magie Kommentar.
InformationsquelleAutor 48klocs
Wenn Sie mit 3.5, sieht aus wie es ein Reverse () - Methode von LINQ
Das wird nicht Durchlaufen in umgekehrter Reihenfolge, aber umkehren würde, die gesamte Liste, dann kann man Ihr foreach.
Oder verwenden Sie eine einfache for-Anweisung:
IndexOutOfBounds
Fehler. Start beii = count - 1
"Das wird nicht Durchlaufen in umgekehrter Reihenfolge, aber umkehren würde die gesamte Liste." Dies ist unwahr. Durchlaufen in umgekehrter Reihenfolge ist genau, was die
Enumerable.Reverse<T>
- Erweiterung-Methode. Sie können sich denken, vonList<T>.Reverse
, die verwirrenderweise denselben Namen hat.guter Fang, aktualisiert. @Dan Tao, ich dachte der List<T>.Reverse.
ja, ich bemerkte, dass, nachdem es abgestürzt ist danke 😛
InformationsquelleAutor taylonr
Alternativ, wenn der Sammlung ein IEnumerable und daher ohne random-access-verwenden Sie System.Linq ist IEnumerable.Reverse () - Methode und wenden forearch wie gewohnt.
InformationsquelleAutor Kyte
Reaktive Erweiterung für .NET 3.5/4.0
InformationsquelleAutor Kyaw Thurein