c#-计算lis中出现次数的方法

有没有一种简单的方法可以将列表中所有元素出现在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]);
    }
}
Nona Urbiz asked 2020-07-11T07:23:40Z
4个解决方案
78 votes

这样的事情怎么样...

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如何对项目进行分组。 Func接受一个int并返回用于我的分组的密钥。 在这种情况下,我将获得IGrouping<int,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.
}

因此,这是一个Func,它将接受一个int并返回一个字符串,就像...

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

但是,由于原始问题要求知道原始列表值及其计数,因此我仅使用整数来键入整数分组,以使示例更简单。

JP Alioto answered 2020-07-11T07:24:12Z
15 votes

您可以执行以下操作以从事物列表中进行计数。

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();
Stan R. answered 2020-07-11T07:24:36Z
14 votes
var wordCount =
    from word in words
    group word by word into g
    select new { g.Key, Count = g.Count() };    

这取自linqpad中的示例之一

Steve Mitcham answered 2020-07-11T07:24:56Z
-3 votes

您的外部循环遍历列表中的所有单词。 这是不必要的,会给您带来麻烦。 删除它,它应该可以正常工作。

Paul Sonier answered 2020-07-11T07:25:16Z
translate from https://stackoverflow.com:/questions/1139181/a-method-to-count-occurrences-in-a-list