C#使用LINQ按平均分区间分组学生列表并统计区间数实现方法
实现方案
核心逻辑说明
通过LINQ的Select先计算每位学生平均分,再用GroupBy按自定义的区间规则分组,最后直接对分组结果计数即可得到区间总数。
完整代码实现
// 1. 计算平均分+按区间分组 var studentGroups = students // 先计算每位学生的平均分 .Select(stu => new { stu.Name, Average = stu.Scores.Average() }) // 按自定义分数区间分组 .GroupBy(stu => { // 可根据需求自由调整区间划分规则 return stu.Average switch { > 90 and <= 100 => "Score > 90 and <= 100", > 80 and <= 90 => "Score > 80 and <= 90", > 70 and <= 80 => "Score > 70 and <= 80", > 60 and <= 70 => "Score > 60 and <= 70", _ => "Score <= 60" }; }) // 按区间分数从高到低排序,符合常规展示逻辑 .OrderByDescending(g => g.Key);
如果使用低于C# 9的版本,把分组部分的switch表达式替换为if-else判断即可。
输出与区间统计
// 输出分组结果 foreach (var group in studentGroups) { Console.WriteLine(group.Key); // 组内学生按平均分从高到低排序展示 foreach (var stu in group.OrderByDescending(s => s.Average)) { Console.WriteLine($" {stu.Name} {stu.Average:F1}"); } } // 直接统计分组数量即为区间总数 int intervalCount = studentGroups.Count(); Console.WriteLine($"分组区间总数:{intervalCount}");
自定义调整说明
如果需要修改区间划分规则,只需要调整GroupBy方法内的分支判断逻辑即可,无需修改其他代码。
内容的提问来源于stack exchange,提问作者user15343916
相关产品推荐
相关产品推荐

