Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表<;字符串>;简单分组和计数?_C#_Linq Group - Fatal编程技术网

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

C# 列表<;字符串>;简单分组和计数?,c#,linq-group,C#,Linq Group,我有一个非常简单的列表设置,每个项目包含许多单个字符(即aforeach将控制台输出为“a”“k”“p”等) 我想做的是能够对项目进行分组,并计算每个项目发生的次数,以便获得类似以下内容的输出: a - 2 t - 3 y - 3 关于最好的方法有什么建议吗 如果有帮助的话,我正在使用.Net 4。(假设每个条目都是一个字符,顺便问一下,您没有列表的原因是什么?) 那么: // To get a Dictionary<string, int> var counts = list.G

我有一个非常简单的
列表
设置,每个项目包含许多单个字符(即a
foreach
将控制台输出为“a”“k”“p”等)

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

a - 2
t - 3
y - 3
关于最好的方法有什么建议吗

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

(假设每个条目都是一个字符,顺便问一下,您没有
列表的原因是什么?)

那么:

// 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() });
//获取字典
var counts=list.GroupBy(x=>x)
.ToDictionary(g=>g.Key,g=>g.Count());
//只是为了得到一个序列
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()));