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

- Hello World! par Le blog de hamid le il y a 1 heure et 14 minutes

- MSBuild Extension Pack sur codeplex par Michel Perfetti [Miiitch] le il y a 2 heures et 33 minutes

- TCB : Travailler en équipe sans réseau par The Mit's Blog le il y a 5 heures et 44 minutes

- Accès anonyme et les pages Forms / viewlsts.aspx... par Nicolas Humann le il y a 9 heures et 37 minutes

- l'Atelier 4 du coach C# est disponible par Bernard Fedotoff le il y a 11 heures et 12 minutes

- [WPF] Formatter l’affichage lors d’un binding, via StringFormat par Thomas Lebrun le il y a 16 heures et 14 minutes

- WSC08 : Le bilan, Les Photos, Les Webcasts à voir ou à revoir par Blog de Daniel TIZON [daniel] le 10-07-2008, 01:14

- SharePoint et ses DB : Avez vous pensé à les "Tweaker" ? par The Mit's Blog le 10-07-2008, 00:45

- NTttcp : Mesurer la vitesse d'un réseau par Blog d'Olivier Huet le 10-07-2008, 00:21

- Un nouveau quizz par Matthieu MEZIL le 10-06-2008, 21:37