Maison > développement back-end > C++ > Comment LINQ peut-il récupérer efficacement les N derniers éléments d'une collection ?

Comment LINQ peut-il récupérer efficacement les N derniers éléments d'une collection ?

Linda Hamilton
Libérer: 2025-01-03 03:27:39
original
828 Les gens l'ont consulté

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

Récupérer les N derniers éléments d'une collection avec LINQ

Comprendre la fin d'une collection est une exigence courante dans divers scénarios de programmation. Dans cet article, nous explorerons comment LINQ peut nous aider à extraire efficacement les N derniers éléments d'une collection.

Bien que le framework ne fournisse pas de méthode dédiée pour cette tâche précise, nous pouvons exploiter la puissance de LINQ pour créer une méthode d'extension élégante qui atteint notre objectif. L'extrait de code suivant illustre cette méthode d'extension :

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

Cette approche offre plusieurs avantages clés :

  • Préserve l'ordre des articles : Elle conserve l'ordre d'origine des éléments de la collection sans recourir au tri.
  • Compatibilité :C'est compatible avec un large éventail de fournisseurs LINQ, garantissant une cohérence multiplateforme.

Il est crucial d'éviter d'appeler Skip avec un nombre négatif, car certains fournisseurs (par exemple, Entity Framework) peuvent lancer une ArgumentException. L'appel Math.Max ​​protège contre ce problème.

Pour plus de commodité, nous pouvons regrouper la méthode d'extension dans une classe distincte :

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

Avec cette méthode d'extension, nous pouvons récupérer le dernier N éléments de tout énumérable utilisant une syntaxe concise, telle que :

collection.TakeLast(5);
Copier après la connexion

Bien que cette approche soit généralement performante, il est important d'être conscient des implications potentielles en termes de performances. L'appel à Count() peut déclencher plusieurs énumérations pour certaines structures de données. Pour éviter cela, envisagez d'autres algorithmes à un passage (par exemple, la mise en mémoire tampon) pour les énumérables en avant uniquement.

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