You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用LINQ对C# List<string>中的重复值分组并统计次数?

使用LINQ实现字符串分组统计并排序

方法语法实现

用GroupBy分组后配合Count统计次数,再排序就能得到你要的结果,代码如下:

List<string> myList = new List<string> { "black", "red", "green", "green", "red", "green", "blue" };

// 分组、统计、排序
var groupedData = myList
    .GroupBy(str => str) // 按字符串内容分组
    .Select(group => new { 
        Color = group.Key, 
        Occurrences = group.Count() 
    })
    .OrderByDescending(item => item.Occurrences) // 按出现次数降序排列
    .ThenBy(item => item.Color); // 次数相同时按字符串字典序升序(可选)

// 转换成字典(和你想要的结构一致)
var resultDict = groupedData.ToDictionary(item => item.Color, item => item.Occurrences);

代码说明

  • GroupBy(str => str):把列表中相同的字符串归为一组,每组的Key就是对应的字符串。
  • Select(...):从每个分组里提取字符串本身和该组的元素数量(也就是出现次数),生成包含这两个信息的匿名对象。
  • OrderByDescending(...):让出现次数多的排在前面,符合你示例里的顺序。
  • ThenBy(...):当多个字符串出现次数相同时,按字符串的字典序排序,比如示例里的black和blue会按顺序排列。

查询语法实现(另一种写法)

如果你习惯LINQ的查询语法,也可以这样写:

var groupedData = from str in myList
                  group str by str into colorGroup
                  orderby colorGroup.Count() descending, colorGroup.Key
                  select new { 
                      Color = colorGroup.Key, 
                      Occurrences = colorGroup.Count() 
                  };

var resultDict = groupedData.ToDictionary(item => item.Color, item => item.Occurrences);

输出结果验证

如果要打印出你示例中的格式,可以遍历字典:

Console.WriteLine("{");
foreach (var entry in resultDict)
{
    Console.WriteLine($"  \"{entry.Key}\": {entry.Value},");
}
Console.WriteLine("}");

运行后会输出:

{
  "green": 3,
  "red": 2,
  "black": 1,
  "blue": 1,
}

内容的提问来源于stack exchange,提问作者SlappingTheBass12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:05:47