关于linq:c#对列表进行分组并获取每个组的计数

c# Group a list and get the count of each group

本问题已经有最佳答案,请猛点这里访问。

我有一个字符串列表,其中包含多个相同值的条目。我需要获取列表中所有唯一元素以及每个唯一元素组的计数。例如:

1
2
3
4
5
6
7
8
9
10
11
        string a ="cat";
        string b ="dog";
        string c ="cat";
        string d ="horse";

        List<string> list = new List<string>();

        list.Add(a);
        list.Add(b);
        list.Add(c);
        list.Add(d);

我需要这些数据:"猫"-2,"狗"-1,"马"-1


您需要执行GroupBy:

1
2
3
var result=list.GroupBy(s=>s).Select(g=>new{Animal=g.Key, Count=g.Count()});
foreach(var e in result)
   Console.WriteLine("{0}--{1}",e.Animal,e.Count);

如果您愿意,也可以删除对Select扩展方法的调用:

1
2
3
var result=list.GroupBy(s=>s);
foreach(var g in result)
   Console.WriteLine("{0}--{1}",g.Key,g.Count());

1
2
 List<string> list = new List<string>() {"cat","dog","cat","horse" };
 var groupedResult = list.GroupBy(x => x).Select(y=> new{item = y.Key , count=y.Count()}) ;