Une méthode pour compter les occurrences dans une liste

Existe-t-il un moyen simple de compter le nombre d’occurrences de tous les éléments d’une liste dans cette même liste en C #?

Quelque chose comme ça:

using System; using System.IO; using System.Text.RegularExpressions; using System.Collections.Generic; using System.Linq; ssortingng Occur; List Words = new List(); List Occurrences = new List(); // ~170 elements added. . . for (int i = 0;i<Words.Count;i++){ Words = Words.Distinct().ToList(); for (int ii = 0;ii<Words.Count;ii++){Occur = new Regex(Words[ii]).Matches(Words[]).Count;} Occurrences.Add (Occur); Console.Write("{0} ({1}), ", Words[i], Occurrences[i]); } } 

Que diriez-vous quelque chose comme ça …

 var l1 = new List() { 1,2,3,4,5,2,2,2,4,4,4,1 }; var g = l1.GroupBy( i => i ); foreach( var grp in g ) { Console.WriteLine( "{0} {1}", grp.Key, grp.Count() ); } 

Modifier par commentaire: je vais essayer de faire cette justice. 🙂

Dans mon exemple, c’est un Func car ma liste est ints. Donc, je dis à GroupBy comment grouper mes articles. Le Func prend un int et retourne la clé pour mon regroupement. Dans ce cas, je vais avoir un IGrouping (un groupement d’ints indexé par un int). Si je l’ai changé pour ( i => i.ToSsortingng() ) par exemple, je serais en i => i.ToSsortingng() mon groupe par une chaîne. Vous pouvez imaginer un exemple moins sortingvial que la saisie par “1”, “2”, “3” … peut-être que je crée une fonction qui renvoie “un”, “deux”, “trois” pour être mes clés …

 private ssortingng SampleMethod( int i ) { // magically return "One" if i == 1, "Two" if i == 2, etc. } 

Donc, c’est un Func qui prendrait un int et renverrait une chaîne, comme …

 i => // magically return "One" if i == 1, "Two" if i == 2, etc. 

Mais, comme la question initiale demandait de connaître la valeur de la liste d’origine et qu’elle comptait, je viens d’utiliser un entier pour définir mon groupe d’entiers afin de simplifier mon exemple.

 var wordCount = from word in words group word by word into g select new { g.Key, Count = g.Count() }; 

Ceci est pris de l’un des exemples dans le linqpad

Vous pouvez faire quelque chose comme ça pour compter dans une liste de choses.

 IList names = new List() { "ToSsortingng", "Format" }; IEnumerable methodNames = typeof(Ssortingng).GetMethods().Select(x => x.Name); int count = methodNames.Where(x => names.Contains(x)).Count(); 

Compter un seul élément

 ssortingng occur = "Test1"; IList words = new List() {"Test1","Test2","Test3","Test1"}; int count = words.Where(x => x.Equals(occur)).Count(); 

Votre boucle externe passe en boucle sur tous les mots de la liste. C’est inutile et cela vous causera des problèmes. Retirez-le et il devrait fonctionner correctement.