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

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

Patricia Arquette
Patricia ArquetteOriginal
2025-01-03 04:04:38761Durchsuche

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

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!

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