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: Modifier les jeux de couleur dans les Thèmes des pages modernes de SharePoint Online par Blog Technique de Romelard Fabrice le 07-04-2018, 13:26

- Office 365: Script PowerShell pour fixer le Quota Warning de toutes les collections d’un tenant par Blog Technique de Romelard Fabrice le 07-03-2018, 14:16

- MVP Award 2018-2019 par Blog de Jérémy Jeanson le 07-02-2018, 20:39

- Reprise des articles de 2014 à aujourd’hui par Blog de Jérémy Jeanson le 06-20-2018, 13:00

- Office 365: Comment créer un sous-plan dans Office 365 Planner par Blog Technique de Romelard Fabrice le 06-14-2018, 17:19

- Office 365: Script PowerShell de création de sous-sites basés sur CSOM ou PnP par Blog Technique de Romelard Fabrice le 06-12-2018, 14:58

- Office 365: Comment exporter tous les comptes Azure Active Directory ayant une license via PowerShell par Blog Technique de Romelard Fabrice le 05-17-2018, 13:46

- PowerShell: Comment avoir le Country Name depuis un Country Code par Blog Technique de Romelard Fabrice le 05-17-2018, 13:20

- Office 365: Comment supprimer un compte externe d’un site SharePoint Online en mode Extranet par Blog Technique de Romelard Fabrice le 05-11-2018, 17:00

- Office 365: Comment reconfigurer le lien “Bloc-notes” d’un teamsite par Blog Technique de Romelard Fabrice le 05-09-2018, 16:45