Heim >Backend-Entwicklung >C++ >Wie kann ich mit LINQ effizient die letzten N Elemente einer Sammlung abrufen?

Wie kann ich mit LINQ effizient die letzten N Elemente einer Sammlung abrufen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-04 19:56:44848Durchsuche

How Can I Efficiently Retrieve the Last N Elements of a Collection Using LINQ?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn