una texto repite repetidos repetidas que palabras mas lista letras letra especificos elementos contar coincidencias caracteres cadena c# .net-3.5 list count match

c# - texto - Un método para contar las ocurrencias en una lista



contar palabras de un texto c# (4)

¿Hay una manera simple de contar el número de ocurrencias de todos los elementos de una lista en esa misma lista en C #?

Algo como esto:

using System; using System.IO; using System.Text.RegularExpressions; using System.Collections.Generic; using System.Linq; string Occur; List<string> Words = new List<string>(); List<string> Occurrences = new List<string>(); // ~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]); } }


Puede hacer algo como esto para contar de una lista de cosas.

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

Para contar un solo elemento

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


Qué tal algo como esto ...

var l1 = new List<int>() { 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() ); }

Editar por comentario: intentaré y haré esto bien. :)

En mi ejemplo, es un Func<int, TKey> porque mi lista es ints. Entonces, le digo a GroupBy cómo agrupar mis artículos. El Func toma un int y devuelve la clave para mi agrupación. En este caso, obtendré un IGrouping<int,int> (una agrupación de ints keyed by a int). Si lo cambiara a ( i => i.ToString() ) por ejemplo, estaría marcando mi agrupación por una cadena. Puedes imaginar un ejemplo menos trivial que tecleando "1", "2", "3" ... tal vez haga una función que devuelva "uno", "dos", "tres" para ser mis llaves ...

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

Entonces, ese es un Func que tomaría un int y devolvería una cadena, como ...

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

Pero, dado que la pregunta original requería saber el valor de la lista original y su recuento, simplemente usé un número entero para codificar mi agrupación entera para simplificar mi ejemplo.


Su ciclo externo gira sobre todas las palabras de la lista. No es necesario y le causará problemas. Quítalo y debería funcionar correctamente.


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

Esto se toma de uno de los ejemplos en el linqpad