列表简单组和计数?

我有一个非常简单的List设置,每个项目包含许多单个字符(IE将foreach控制到“a”“k”“p”等)

我想要做的是能够对项目进行分组并计算每个项目的数量,以便我得到类似于以下内容的输出:

 a - 2 t - 3 y - 3 

有关最佳方法的任何提示吗?

我正在使用.Net 4,如果有任何帮助的话。

(鉴于每个条目都是一个字符,顺便说一句,你有没有理由没有List ?)

怎么样:

 // To get a Dictionary 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() }); 

请注意,就内部表示而言,这在某种程度上是低效的。 你绝对可以“手动”更高效地完成它,但它也需要更多的工作。 除非你的名单很大,否则我会坚持这一点。

最简单的方法是使用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; } 
 var list = new[] {"a", "t", "t", "y", "a", "y", "y", "t"}; var result = (from item in list group item by item into itemGroup select String.Format("{0} - {1}", itemGroup.Key, itemGroup.Count()));