Récupération des N derniers éléments d'une collection à l'aide de LINQ
Dans LINQ, l'obtention des N derniers éléments d'une collection peut être obtenue avec une combinaison des méthodes Skip() et Count(). La méthode Skip() permet de sauter un nombre spécifié d'éléments depuis le début d'une collection, tandis que Count() renvoie le nombre total d'éléments dans la collection.
Pour obtenir les N derniers éléments, on peut déterminez le nombre total de la collection et soustrayez-en N. La valeur résultante est ensuite transmise à Skip() pour ignorer les premiers (nombre - N) éléments, ne laissant que les N derniers éléments. Cela peut être exprimé comme suit :
collection.Skip(Math.Max(0, collection.Count() - N));
Cette approche permet effectivement de préserver l'ordre des éléments sans nécessiter de tri. Il garantit également la compatibilité entre plusieurs fournisseurs LINQ.
Implémentation de la méthode d'extension
Voici une implémentation de méthode d'extension pour TakeLast(int N) qui utilise l'approche ci-dessus :
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)); } }
Cette méthode d'extension peut être utilisée comme suit :
collection.TakeLast(5);
Considérations sur les performances
Bien que cette approche soit généralement efficace, il convient de considérer l'impact de l'appel de Count() sur certaines structures de données. Dans certains cas, cela peut entraîner l’énumération de l’intégralité de la structure de données. Les performances peuvent être encore optimisées dans les situations où un énumérable en avant uniquement est requis et où plusieurs transmissions sur les données doivent être évitées. Des algorithmes alternatifs en un seul passage qui utilisent des tampons temporaires peuvent être utilisés dans de tels cas.
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!