一种统计列表中出现次数的方法
有没有一种简单的方法可以将列表中所有元素的出现次数计数到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]);
}
}
回答:
这样的事情怎么样…
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.
但是,由于原始问题要求知道原始列表值及其计数,因此我仅使用整数来键入整数分组,以使示例更简单。
以上是 一种统计列表中出现次数的方法 的全部内容, 来源链接: utcz.com/qa/401601.html