列表<string>简单组和计数?</string>

时间:2012-03-14 13:13:02

标签: c# linq-group

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

我想要做的是能够对项目进行分组,并计算每个项目的数量,这样我的输出类似于:

a - 2
t - 3
y - 3

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

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

3 个答案:

答案 0 :(得分: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() });

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

答案 1 :(得分:8)

最简单的方法是使用

进行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;
}

答案 2 :(得分:2)

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()));