c# 的 GroupBy用法
时间: 2024-03-01 16:49:49 浏览: 21
在 C# 中,GroupBy 是一个 Linq 扩展方法,用于将一个集合按照指定的键进行分组。其基本用法如下:
```csharp
IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector
)
```
其中,source 表示要进行分组的集合,keySelector 表示用于提取分组键的函数。函数返回的结果相同的元素将被分到同一组中,最终返回一个实现了 IEnumerable<IGrouping<TKey, TSource>> 接口的集合,其中 IGrouping<TKey, TSource> 表示一个键与其对应的元素集合。
示例代码如下:
```csharp
class Program
{
static void Main(string[] args)
{
var students = new List<Student>()
{
new Student() {Name = "Tom", Gender = Gender.Male, Age = 18},
new Student() {Name = "Jerry", Gender = Gender.Male, Age = 20},
new Student() {Name = "Lucy", Gender = Gender.Female, Age = 19},
new Student() {Name = "Lily", Gender = Gender.Female, Age = 21},
new Student() {Name = "Bob", Gender = Gender.Male, Age = 19},
new Student() {Name = "Alice", Gender = Gender.Female, Age = 18},
};
// 按照性别分组
var groups = students.GroupBy(s => s.Gender);
foreach (var group in groups)
{
Console.WriteLine($"Gender: {group.Key}");
foreach (var student in group)
{
Console.WriteLine($" {student.Name}, {student.Age} years old.");
}
}
// 按照年龄分组
groups = students.GroupBy(s => s.Age);
foreach (var group in groups)
{
Console.WriteLine($"Age: {group.Key}");
foreach (var student in group)
{
Console.WriteLine($" {student.Name}, {student.Gender}.");
}
}
Console.ReadLine();
}
}
enum Gender
{
Male,
Female
}
class Student
{
public string Name { get; set; }
public Gender Gender { get; set; }
public int Age { get; set; }
}
```
输出结果如下:
```
Gender: Male
Tom, 18 years old.
Jerry, 20 years old.
Bob, 19 years old.
Gender: Female
Lucy, 19 years old.
Lily, 21 years old.
Alice, 18 years old.
Age: 18
Tom, Male.
Alice, Female.
Age: 20
Jerry, Male.
Age: 19
Lucy, Female.
Bob, Male.
Age: 21
Lily, Female.
```