C# Linq是一种强大的编程语言,可以使用Linq查询语言进行分组操作。GroupBy()是Linq库中负责分组的方法,可以按照一个或多个条件把数据集合分成多个子集,同时返回一个IEnumerable集合,其中每个元素包含一个子集。下面是GroupBy()的完整攻略。
规范的方法签名
GroupBy()方法的标准签名如下:
public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector
)
其中, TSource
表示序列中元素的类型;TKey
表示分类关键字的数据类型;source
是一个可枚举的类型的集合;keySelector
是指定如何从序列的元素中获取分类关键字的查询函数。
GroupBy()方法返回的结果是以 IGrouping<TKey, TElement>
对象为元素的 IEnumerable
序列,其中,每个 IGrouping<TKey, TElement>
对象都表示一个子集,TKey
表示子集中元素的分类, TElement
表示子集中元素的类型。
用例示例
下面是两个简单的GroupBy()用例示例。
示例1:按照年龄分组
假设现在有一个包含员工信息的类,每个实例包含员工的姓名和年龄。现在需要按照员工的年龄分组,代码如下:
class Employee
{
public string Name { get; set; }
public int Age { get; set; }
}
// 初始化员工列表
List<Employee> employees = new List<Employee>
{
new Employee { Name = "Lucas", Age = 24 },
new Employee { Name = "Jack", Age = 22 },
new Employee { Name = "Tom", Age = 24 },
new Employee { Name = "Mike", Age = 22 },
new Employee { Name = "John", Age = 23 }
};
// 按照年龄进行分组
var groups = employees.GroupBy(e => e.Age);
// 打印每个年龄分组的员工信息
foreach (var group in groups)
{
Console.WriteLine("Age: {0}", group.Key);
foreach (var employee in group)
{
Console.WriteLine(" {0}", employee.Name);
}
}
输出结果如下:
Age: 24
Lucas
Tom
Age: 22
Jack
Mike
Age: 23
John
示例2:按照首字母分组
假设现在有一个以字符串为元素的集合,需要按照每个字符串首字母分组。代码如下:
// 初始化字符串列表
List<string> strings = new List<string>
{
"apple", "banana", "orange", "grape", "pear"
};
// 按照首字母进行分组
var groups = strings.GroupBy(s => s[0]);
// 打印每个首字母分组的字符串
foreach (var group in groups)
{
Console.WriteLine("First letter: {0}", group.Key);
foreach (var str in group)
{
Console.WriteLine(" {0}", str);
}
}
输出结果如下:
First letter: a
apple
First letter: b
banana
First letter: o
orange
First letter: g
grape
First letter: p
pear
总结
GroupBy()是一种非常有用的工具,可以让我们更方便地对数据集合进行分组。无论是对于Linq初学者还是有经验的开发人员,都可以从GroupBy()方法中学到很多有益的东西。