Das Verständnis des Endes einer Sammlung ist eine häufige Anforderung in verschiedenen Programmierszenarien. In diesem Artikel werden wir untersuchen, wie LINQ uns dabei unterstützen kann, die letzten N Elemente einer Sammlung effektiv zu extrahieren.
Obwohl das Framework keine dedizierte Methode für diese genaue Aufgabe bereitstellt, können wir die Leistungsfähigkeit von nutzen LINQ, um eine elegante Erweiterungsmethode zu erstellen, die unser Ziel erreicht. Das folgende Code-Snippet demonstriert diese Erweiterungsmethode:
collection.Skip(Math.Max(0, collection.Count() - N));
Dieser Ansatz bietet mehrere wichtige Vorteile:
Es ist wichtig, Skip nicht mit einer negativen Zahl aufzurufen, da einige Anbieter (z. B. Entity Framework) möglicherweise eine ArgumentException auslösen. Der Math.Max-Aufruf schützt vor diesem Problem.
Der Einfachheit halber können wir die Erweiterungsmethode in eine separate Klasse packen:
public static class MiscExtensions { public static IEnumerable<T> TakeLast<T>(this IEnumerable<T> source, int N) { return source.Skip(Math.Max(0, source.Count() - N)); } }
Mit dieser Erweiterungsmethode können wir das letzte N abrufen Elemente einer beliebigen Aufzählung unter Verwendung einer prägnanten Syntax, wie zum Beispiel:
collection.TakeLast(5);
Obwohl dieser Ansatz im Allgemeinen performant ist, ist es wichtig, sich der potenziellen Leistung bewusst zu sein Implikationen. Der Aufruf von Count() kann für bestimmte Datenstrukturen mehrere Aufzählungen auslösen. Um dies zu vermeiden, ziehen Sie alternative One-Pass-Algorithmen (z. B. Pufferung) für Nur-Vorwärts-Aufzählungen in Betracht.
Das obige ist der detaillierte Inhalt vonWie kann LINQ die letzten N Elemente einer Sammlung effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!