2012-04-02 16 views
2

Ich habe eine generische Liste von Integer und es enthält Zufallszahlen. Wie würde ich die letzten n Elemente aus der Liste mit LINQ auswählen?Wählen Sie unten N von Generic List

Ich weiß kann myList.GetRange (index, count) verwenden, um die letzten n Elemente aus der Liste zu erhalten. Gibt es eine Möglichkeit, dies in LINQ zu tun?

THanks

Grüßen, Balan

+0

Im Allgemeinen würde ich Linq anstelle der in einen Typ eingebauten Funktionalität nicht verwenden, da es weniger leistungsfähig ist. Linq arbeitet mit IEnumerable, was bedeutet, dass die gesamte Liste durchlaufen werden muss. GetRange kann optimaler sein. – Maciej

+0

@Maciej Ich hatte den Eindruck, dass LINQ beim Betrieb auf 'ICollection' und' IList' transparent optimiert wurde. Abhängig von der Abfrage bedeutet dies nicht notwendigerweise, dass die gesamte Liste durchlaufen werden muss. –

+0

@Bradley: Ja, in einigen Fällen ist es optimiert, aber nicht immer. Siehe http://stackoverflow.com/questions/6245172/why-isnt-skip-in-linq-to-objects-optimized – Maciej

Antwort

8
var count = myList.Count; 

myList.Skip(count-n) 

Update:

entfernt redundante Nehmen.

2

Verwenden überspringen:

myList.Skip(index).ToArray() 
5

könnten Sie myList.Reverse().Take(n) verwenden, um zu erreichen, was Sie wollen.

+6

Sie müssten einen zusätzlichen Aufruf zu 'Reverse' -' myList.Reverse(). n) .Reverse() '- um die Elemente in der Reihenfolge zurückzugeben, in der sie in der ursprünglichen Liste gespeichert sind. – BACON

+0

@BACON Guter Punkt, obwohl die Reihenfolge möglicherweise nicht wichtig ist, wenn die Liste nur Zufallszahlen enthält. –

Verwandte Themen