Maison > développement back-end > C++ > Comment puis-je récupérer efficacement les N derniers éléments d'une collection à l'aide de LINQ ?

Comment puis-je récupérer efficacement les N derniers éléments d'une collection à l'aide de LINQ ?

Linda Hamilton
Libérer: 2025-01-04 19:56:44
original
851 Les gens l'ont consulté

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

Détermination des N derniers éléments d'une collection avec LINQ

Récupérer un nombre spécifié d'éléments de conclusion d'une collection peut être une exigence fréquente. Bien que le framework ne propose pas de méthode dédiée, une méthode d'extension peut être bénéfique.

Utilisation de la méthode d'extension TakeLast

Une méthode efficace pour extraire les N derniers éléments utilise Méthode Skip de LINQ. Le code suivant illustre son utilisation :

collection.Skip(Math.Max(0, collection.Count() - N));
Copier après la connexion

En préservant l'ordre des éléments, cette technique évite le tri et assure la compatibilité avec les différents fournisseurs LINQ. Des précautions doivent être prises pour éviter de transmettre des arguments négatifs à Skip, car certains fournisseurs (par exemple, Entity Framework) peuvent déclencher des exceptions.

Implémentation de la méthode d'extension

Le code ci-dessous présente une méthode d'extension TakeLast personnalisée :

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));
    }
}
Copier après la connexion

Performance Considérations

En fonction de la structure des données, le comptage (via Count()) peut entraîner plusieurs énumérations. Bien que des optimisations existent pour certains types de données et scénarios, cette approche peut ne pas convenir aux énumérables directs uniquement.

Algorithmes alternatifs en un seul passage

Dans les cas où les performances sont des algorithmes critiques et alternatifs à un seul passage peuvent être utilisés. Ces approches utilisent un tampon temporaire pour accumuler les éléments, produisant les N derniers éléments une fois la fin de la collection atteinte. Les techniques développées par Lasse V. Karlsen et Mark Byers illustrent de tels algorithmes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal