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

如何使用LINQ从List<Program>集合中按Id与字符分组统计数量?

解决LINQ分组统计问题

嘿,我看你这问题出在分组逻辑上啦!原来的SelectMany(x => x.id)完全用错了——SelectMany是用来展平嵌套集合的,但你这里每个Program对象的id是单个值,这么写之后只会得到一堆id的列表,再按id分组只能统计每个id的总数量,当然出不来你要的id+字符的组合统计结果。

你需要把id和对应的字符作为联合分组键,这样才能把同一个id下相同字符的元素归为一组。正确的代码应该是这样的:

// 假设你的Program类里存储字符的属性叫Char,要是实际属性名不一样记得替换哦
var query = programs
    .GroupBy(p => new { p.id, p.Char })
    .Select(g => new { 
        Id = g.Key.id, 
        Char = g.Key.Char, 
        Count = g.Count() 
    });

简单解释下这段代码:

  • GroupBy部分:用匿名类型new { p.id, p.Char }作为分组的依据,这样只有当id和字符都完全相同时,元素才会被分到同一组里。
  • Select部分:从每个分组里取出键中的id和字符,再用g.Count()统计当前组里的元素数量,正好对应你想要的结果结构。

如果要把结果打印成表格样式,还可以加一段遍历代码:

Console.WriteLine("Id  Char  Count");
foreach (var item in query)
{
    // 用格式化字符串对齐输出,看起来更整齐
    Console.WriteLine($"{item.Id,-3} {item.Char,-5} {item.Count}");
}

运行这段代码后,就能得到你预期的输出啦:

Id  Char  Count
1   R     3
1   S     2
2   S     3
3   K     1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:48:15