C# GroupBy 用法

class Student
{
    public int StuId { get; set; }

    public string ClassName { get; set; }

    public string StudentName { get; set; }
}
static List<Student> studentList = new List<Student>
{
    new Student {ClassName = "软工一班", StudentName = "康巴一", StuId = 1},
    new Student {ClassName = "软工一班", StudentName = "康巴二", StuId = 2},
    new Student {ClassName = "软工一班", StudentName = "康巴三", StuId = 3},
    new Student {ClassName = "软工二班", StudentName = "康定一", StuId = 4},
    new Student {ClassName = "软工二班", StudentName = "康定二", StuId = 5},
    new Student {ClassName = "软工二班", StudentName = "康定三", StuId = 6},
};

发现只能根据一个字段进行 GroupBy,能获取到分组好的 Student 对象
根据key 值取不同分组:

static void Main(string[] args)
{
   IEnumerable<IGrouping<string,Student>> studentGroup = studentList.GroupBy(s => s.ClassName);

   foreach (IGrouping<string, Student> item in studentGroup)
   {
       Console.WriteLine(item.Key);

       //对item 在进行遍历
       foreach (Student student in item)
       {
           Console.WriteLine(student.StudentName);
       }
   }

   Console.ReadKey();
}
### C# 中 `GroupBy` 的使用方法 #### 基本概念 `GroupBy` 是 LINQ 提供的一个标准查询操作符,用于将序列中的元素按指定的键选择器函数进行分组。每个分组由一个键和一组对应的元素组成[^3]。 #### 单列分组示例 以下是基于单个属性进行分组的简单示例: ```csharp using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<Person> people = new List<Person> { new Person { Name = "Alice", Age = 20 }, new Person { Name = "Bob", Age = 30 }, new Person { Name = "Charlie", Age = 25 } }; var ageGroups = people.GroupBy(p => p.Age > 25 ? "Older" : "Younger"); foreach (var group in ageGroups) { Console.WriteLine($"Group: {group.Key}"); foreach (var person in group) { Console.WriteLine($" {person.Name}, {person.Age}"); } } } } public class Person { public string Name { get; set; } public int Age { get; set; } } ``` 此代码通过条件表达式将人员分为两组:“Older” 和 “Younger”,并打印每组的内容[^1]。 #### 多列分组示例 当需要根据多个字段进行分组时,可以传递匿名对象作为键。以下是一个多列分组的例子: ```csharp using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<Student> students = new List<Student> { new Student { Grade = "A", Class = "Math", Score = 85 }, new Student { Grade = "B", Class = "Science", Score = 90 }, new Student { Grade = "A", Class = "Math", Score = 75 }, new Student { Grade = "B", Class = "Math", Score = 80 } }; var groupedResults = students .GroupBy(s => new { s.Grade, s.Class }) .Select(g => new { Grade = g.Key.Grade, Class = g.Key.Class, AverageScore = g.Average(s => s.Score), Students = g.ToList() }); foreach (var result in groupedResults) { Console.WriteLine($"Grade: {result.Grade}, Class: {result.Class}, Avg Score: {result.AverageScore}"); } } } public class Student { public string Grade { get; set; } public string Class { get; set; } public double Score { get; set; } } ``` 这段代码展示了如何根据学生的年级 (`Grade`) 和课程 (`Class`) 进行分组,并计算每个分组的平均分数[^2]。 #### 配合聚合函数使用的示例 除了简单的分组外,`GroupBy` 经常与聚合函数一起使用以完成统计分析任务。例如,下面的代码演示了如何统计不同性别的人数: ```csharp using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<Person> people = new List<Person> { new Person { Name = "Alice", Gender = "Female" }, new Person { Name = "Bob", Gender = "Male" }, new Person { Name = "Charlie", Gender = "Male" } }; var genderCounts = from person in people group person by person.Gender into g select new { Gender = g.Key, Count = g.Count() }; foreach (var item in genderCounts) { Console.WriteLine($"{item.Gender}: {item.Count}"); } } } public class Person { public string Name { get; set; } public string Gender { get; set; } } ``` 这里利用了 `Count()` 聚合函数来统计每一性别的总人数[^3]。 #### 总结 `GroupBy` 是一种强大的工具,在数据分析场景中有广泛的应用价值。无论是单一维度还是多维分组,都可以灵活运用这一功能实现复杂的数据整理需求。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值