Heim >Backend-Entwicklung >C++ >Wie kann ich die letzten N Elemente einer LINQ-Sammlung effizient abrufen?
Die letzten N Elemente einer Sammlung mit LINQ abrufen
In LINQ kann das Abrufen der letzten N Elemente einer Sammlung durch eine Kombination erreicht werden der Methoden Skip() und Count(). Mit der Skip()-Methode können Sie eine bestimmte Anzahl von Elementen vom Anfang einer Sammlung überspringen, während Count() die Gesamtzahl der Elemente in der Sammlung zurückgibt.
Um die letzten N Elemente zu erhalten, können wir Bestimmen Sie die Gesamtzahl der Sammlung und subtrahieren Sie N davon. Der resultierende Wert wird dann an Skip() übergeben, um die ersten (Anzahl – N) Elemente zu überspringen und nur die letzten N Elemente übrig zu lassen. Dies kann wie folgt ausgedrückt werden:
collection.Skip(Math.Max(0, collection.Count() - N));
Dieser Ansatz ermöglicht effektiv die Beibehaltung der Elementreihenfolge, ohne dass eine Sortierung erforderlich ist. Es stellt außerdem die Kompatibilität zwischen mehreren LINQ-Anbietern sicher.
Implementierung der Erweiterungsmethode
Hier ist eine Erweiterungsmethodenimplementierung für TakeLast(int N), die den oben genannten Ansatz verwendet:
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)); } }
Diese Erweiterungsmethode kann verwendet werden als folgt:
collection.TakeLast(5);
Leistungsüberlegungen
Obwohl dieser Ansatz im Allgemeinen effizient ist, lohnt es sich, die Auswirkungen des Aufrufs von Count() auf bestimmte Datenstrukturen zu berücksichtigen. In einigen Fällen kann dies zur Aufzählung der gesamten Datenstruktur führen. Die Leistung kann in Situationen weiter optimiert werden, in denen eine Nur-Vorwärts-Aufzählung erforderlich ist und mehrere Durchgänge über die Daten vermieden werden müssen. Für solche Fälle können alternative One-Pass-Algorithmen eingesetzt werden, die temporäre Puffer nutzen.
Das obige ist der detaillierte Inhalt vonWie kann ich die letzten N Elemente einer LINQ-Sammlung effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!