我有一个非常简单的List<string>
设置,每个项目包含许多单个字符(IE a foreach
将控制到"a""k""p"等)
我想做的是能够对项目进行分组,并计算每个项目的数量,这样我得到的输出类似于:
a - 2
t - 3
y - 3
Run Code Online (Sandbox Code Playgroud)
有关最佳方法的任何提示吗?
如果有任何帮助,我正在使用.Net 4.
Jon*_*eet 40
(鉴于每个条目都是一个字符,你有什么理由没有List<char>
顺便说一句吗?)
怎么样:
// To get a Dictionary<string, int>
var counts = list.GroupBy(x => x)
.ToDictionary(g => g.Key, g => g.Count());
// To just get a sequence
var counts = list.GroupBy(x => x)
.Select(g => new { Text = g.Key, Count = g.Count() });
Run Code Online (Sandbox Code Playgroud)
请注意,就内部表示而言,这在某种程度上是低效的.你绝对可以"手动"更高效地完成它,但它也需要更多的工作.除非你的名单很大,否则我会坚持这一点.
最简单的方法是使用Linq
var list = new[] { "a", "a", "b", "c", "d", "b" };
var grouped = list
.GroupBy(s => s)
.Select(g => new { Symbol = g.Key, Count = g.Count() });
foreach (var item in grouped)
{
var symbol = item.Symbol;
var count = item.Count;
}
Run Code Online (Sandbox Code Playgroud)