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

- Office 365: Script PowerShell pour assigner des droits Full Control à un groupe défini par Blog Technique de Romelard Fabrice le 04-30-2017, 09:22

- SharePoint 20XX: Script PowerShell pour exporter en CSV toutes les listes d’une ferme pour auditer le contenu avant migration par Blog Technique de Romelard Fabrice le 03-28-2017, 17:53

- Les pièges de l’installation de Visual Studio 2017 par Blog de Jérémy Jeanson le 03-24-2017, 13:05

- UWP or not UWP sur Visual Studio 2015 ? par Blog de Jérémy Jeanson le 03-08-2017, 19:12

- Désinstallation de .net Core RC1 Update 1 ou SDK de Core 1 Preview 2 par Blog de Jérémy Jeanson le 03-07-2017, 19:29

- Office 365: Ajouter un utilisateur ou groupe dans la liste des Site collection Administrator d’un site SharePoint Online via PowerShell et CSOM par Blog Technique de Romelard Fabrice le 02-24-2017, 18:52

- Office 365: Comment créer une document library qui utilise les ContentTypeHub avec PowerShell et CSOM par Blog Technique de Romelard Fabrice le 02-22-2017, 17:06

- [TFS] Supprimer en masse les dépendances à SQL Enterprise ou Developer avant de procéder à une migration par Blog de Jérémy Jeanson le 02-20-2017, 20:30

- Office 365: Attention au volume utilisé par les fichiers de Thèmes de SharePoint Online par Blog Technique de Romelard Fabrice le 02-07-2017, 18:19

- [SCVMM] Supprimer une machine bloquée par Blog de Jérémy Jeanson le 01-31-2017, 21:22