一种方法来计算一个列表出现(A method to count occurrences in a l

2019-06-14 17:55发布

有一个简单的方法来计算列表中的所有元素的出现次数成C#是同一个列表?

事情是这样的:

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]);
    }
}

Answer 1:

怎么样这样的事情...

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() );
}

根据注释编辑:我会尽量做到这一点正义。 :)

在我的例子,这是一个Func<int, TKey> ,因为我的名单是整数。 所以,我要告诉的GroupBy如何组我的项目。 该函数功能需要一个int和返回我的分组中的关键。 在这种情况下,我会得到一个IGrouping<int,int>由一个int键控整数的一组)。 如果我改成( i => i.ToString()例如,我会通过一个字符串键控我的分组。 你能想象比“1”,键入一个不太简单的例子,“2”,“3” ......也许我作出这样的返回“一”的功能,“二”,“三”是我的钥匙......

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

所以,这是这将需要一个int并返回一个字符串函数求,就像...

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

但是,因为呼吁知道原始列表值原来的问题,它的数量,我只是用一个整数键入我的整数分组,使我的例子简单。



Answer 2:

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

这是从其中一个例子在linqpad取



Answer 3:

你可以做这样的事情从事情的清单来算。

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();

要计算一个单个元素

string occur = "Test1";
IList<String> words = new List<string>() {"Test1","Test2","Test3","Test1"};

int count = words.Where(x => x.Equals(occur)).Count();


Answer 4:

你的外循环遍历列表中的所有单词。 这是不必要的,会造成问题。 删除它,它应能正常工作。



文章来源: A method to count occurrences in a list