列表<;字符串>;简单分组和计数

本文关键字:gt lt 字符串 列表 简单 | 更新日期: 2023-09-27 18:27:50

我有一个非常简单的List<string>设置,每个项目包含很多单个字符(即foreach将控制台输出到"a"k"p"等)

我想做的是能够对项目进行分组,并计算每个项目发生的次数,这样我就可以得到类似于的输出

a - 2
t - 3
y - 3

有什么最好的方法吗?

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

列表<;字符串>;简单分组和计数

(假设每个条目都是一个字符,那么你没有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() });

请注意,就内部表示而言,这在一定程度上是低效的。你肯定可以"手动"更有效地完成这项工作,但这也需要更多的工作。除非你的单子很大,否则我会坚持这个。

最简单的方法是使用的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()));