📅  最后修改于: 2023-12-03 15:17:19.695000             🧑  作者: Mango
GroupBy
是LINQ中的一个运算符,它允许根据指定的键对集合进行分组。分组后的集合会以组为单位进行操作和查询。GroupBy
运算符返回一个IGrouping<TKey, TElement>
类型的集合,其中TKey
表示键的类型,TElement
表示分组中元素的类型。
使用GroupBy
运算符的基本语法如下:
IEnumerable<IGrouping<TKey, TElement>> result = collection.GroupBy(keySelector);
其中,collection
是要分组的集合,keySelector
是一个用于选择键的委托,它定义了针对集合中的每个元素如何提取键的逻辑。
假设有一个名为people
的集合,其中包含了一组人员信息,我们可以根据他们的国家进行分组:
public class Person
{
public string Name { get; set; }
public string Country { get; set; }
}
List<Person> people = new List<Person>()
{
new Person() { Name = "Alice", Country = "USA" },
new Person() { Name = "Bob", Country = "UK" },
new Person() { Name = "Charlie", Country = "USA" },
new Person() { Name = "David", Country = "UK" },
new Person() { Name = "Eve", Country = "USA" }
};
var result = people.GroupBy(p => p.Country);
result
将会是一个IEnumerable<IGrouping<string, Person>>
类型的集合,其中每个IGrouping<string, Person>
对象表示一个分组,其中string
表示国家作为键的类型,Person
则是分组中的元素类型。
可以使用foreach
循环来遍历每个分组,以及分组中的元素:
foreach (var group in result)
{
Console.WriteLine($"Country: {group.Key}");
foreach (var person in group)
{
Console.WriteLine($" - {person.Name}");
}
}
GroupBy
运算符还支持一些重载形式,可以传递一个可选的IEqualityComparer<TKey>
参数来指定键的比较方式,以及一个可选的resultSelector
委托来定义结果的投影。
IEnumerable<TResult> result = collection.GroupBy(keySelector, elementSelector);
通过使用LINQ的GroupBy
运算符,我们可以简单而高效地对集合进行分组操作。这为我们在处理复杂数据时提供了很大的便利性,同时也可以减少我们的代码量。