Bestimmen der letzten N Elemente einer Sammlung mit LINQ
Das Abrufen einer bestimmten Anzahl abschließender Elemente aus einer Sammlung kann eine häufige Anforderung sein. Auch wenn das Framework möglicherweise keine dedizierte Methode bietet, kann eine Erweiterungsmethode von Vorteil sein.
Verwendung der TakeLast-Erweiterungsmethode
Eine effiziente Methode zum Extrahieren der letzten N Elemente nutzt Die Skip-Methode von LINQ. Der folgende Code veranschaulicht seine Verwendung:
collection.Skip(Math.Max(0, collection.Count() - N));
Diese Technik bewahrt die Reihenfolge der Elemente, vermeidet das Sortieren und gewährleistet die Kompatibilität mit verschiedenen LINQ-Anbietern. Es müssen Vorkehrungen getroffen werden, um die Übergabe negativer Argumente an Skip zu vermeiden, da bestimmte Anbieter (z. B. Entity Framework) Ausnahmen auslösen können.
Implementierung der Erweiterungsmethode
Der Code unten stellt eine benutzerdefinierte TakeLast-Erweiterungsmethode vor:
public static class MiscExtensions { // Ex: collection.TakeLast(5); public static IEnumerable<T> TakeLast<T>(this IEnumerable<T> source, int N) { return source.Skip(Math.Max(0, source.Count() - N)); } }
Performance Überlegungen
Abhängig von der Datenstruktur kann das Zählen (über Count()) zu mehreren Aufzählungen führen. Während es für bestimmte Datentypen und Szenarien Optimierungen gibt, ist dieser Ansatz möglicherweise nicht für Nur-Vorwärts-Aufzählungen geeignet.
Alternative One-Pass-Algorithmen
In Fällen, in denen die Leistung beeinträchtigt ist Kritisch können alternative One-Pass-Algorithmen eingesetzt werden. Diese Ansätze nutzen einen temporären Puffer zum Sammeln von Elementen und liefern die letzten N Elemente, sobald das Ende der Sammlung erreicht ist. Die von Lasse V. Karlsen und Mark Byers entwickelten Techniken veranschaulichen solche Algorithmen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit LINQ effizient die letzten N Elemente einer Sammlung abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!