如何用LINQ按Key分组统计不同Value的出现次数?
解决按Code分组统计不同Value出现次数的LINQ实现
实现思路
要满足Key(code)> 不同Value > 出现次数的统计规则,需要进行两级分组:
- 第一级按
code对所有ObjectPart元素分组 - 第二级在每个
code分组内,再按value分组并统计该value的出现次数
完整代码示例
首先确认ObjectPart类的定义(你已具备该类):
public class ObjectPart { public string code { get; set; } public int value { get; set; } }
获取数据源并执行统计:
// 获取所有差异数据 var allDiffs = getAllDiffs(); // 执行分组统计 var stats = allDiffs .GroupBy(part => part.code) .Select(codeGroup => new { Code = codeGroup.Key, ValueOccurrences = codeGroup .GroupBy(part => part.value) .Select(valueGroup => new { Value = valueGroup.Key, Count = valueGroup.Count() }) .ToList() }) .ToList();
示例说明
假设getAllDiffs()返回以下数据:
code: "A", value: 1 code: "A", value: 1 code: "A", value: 2 code: "B", value: 3 code: "B", value: 3 code: "B", value: 4
最终stats的结构为:
- Code: "A"
- Value: 1, Count: 2
- Value: 2, Count: 1
- Code: "B"
- Value: 3, Count: 2
- Value: 4, Count: 1
错误原因分析
你之前的代码可能仅在一级分组后统计了不同value的数量(例如codeGroup.Select(p => p.value).Distinct().Count()),这种方式只能得到每个code下有多少种不同的value,无法获取单个value的出现次数。通过两级分组才能精准统计每个value的重复次数。
内容的提问来源于stack exchange,提问作者Reddi3n
相关产品推荐
相关产品推荐

