IEnumerable<T>.Any() vs. IEnumerable<T>.Count() != 0

An english version is available here .

Après avoir lu ce post d'Eric Lippert, je me suis rappelé que dans l'exemple de ce post, j'utilise IEnumerable<T>.Count() ou je ne me sers pas vraiment la valeur de retour, et du coup, mon code énumère la totalité de la collection inutilement.

J'aurais pu utiliser IEnumerable<T>.Any(), qui après avoir regardé le code IL, démarre simplement l'énumération et s'arrête juste après un élément puis retourne true, ou si il n'y a rien, retourne false.

Bien plus efficace, à défaut d'utiliser PLinq !

Publié dimanche 11 mai 2008 00:15 par jay
Classé sous , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: IEnumerable<T>.Any() vs. IEnumerable<T>.Count() != 0 @ mardi 13 mai 2008 12:41

On a l'habitude de tout le temps utiliser .Count de ICollection, mais il faut faire attention avec LINQ car la méthode d'extension .Count() pour IEnumerable a une complexité linéaire et non constante comme c'est le cas avec ICollection (toute l'énunmeration est itérée).

RaptorXP

# re: IEnumerable<T>.Any() vs. IEnumerable<T>.Count() != 0 @ jeudi 15 mai 2008 08:35

RaportXP: D'accord Any est bien plus optimal que Count dans ce cas là, mais si Enumerable.Count () prend en argument un objet qui implémente ICollection`1, il va retourner le Count de ICollection`1, au lieu d'itérer sur tous les éléments, donc Enumerable.Count n'est pas toujours O(n). Cela dit rien n'oblige l'implémentation de ICollection`1.Count d'être O(1) par contre.

Jb Evain


Les 10 derniers blogs postés

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 10 heures et 42 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 11 heures et 56 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le 07-03-2009, 09:56

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le 07-03-2009, 09:00

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 07-03-2009, 08:45

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18