C# 的 Lambda 表达式提供了一种简洁的方式来编写匿名方法,极大地增强了代码的可读性和灵活性。结合 LINQ (Language Integrated Query) 的 GroupBy
方法,我们可以轻松地对集合进行分组处理,这在处理复杂数据结构时尤其有用。本文将通过几个实际例子,探讨 GroupBy
表达式的应用场景和使用方法。
Lambda 表达式是一种匿名函数,它允许你定义一个方法而不需要给它命名。它通常用于编写简短的回调函数或LINQ查询。
GroupBy
方法是 LINQ 中的一个强大工具,它根据指定的键值对集合中的元素进行分组。这使得对数据进行分类和汇总变得非常简单。
假设我们有一个学生列表,每个学生有班级和成绩属性。我们想要按照班级将学生分组,并计算每个班级的平均成绩。
C#public class Student
{
public string Class { get; set; }
public int Score { get; set; }
}
var students = new List<Student>
{
new Student { Class = "1A", Score = 85 },
new Student { Class = "1B", Score = 90 },
new Student { Class = "1A", Score = 78 },
new Student { Class = "1B", Score = 82 },
};
var groupedByClass = students.GroupBy(s => s.Class).Select(g => new
{
Class = g.Key,
AverageScore = g.Average(s => s.Score)
});
foreach (var group in groupedByClass)
{
Console.WriteLine($"Class: {group.Class}, Average Score: {group.AverageScore}");
}
假设我们需要根据学生的成绩将学生分为“及格”和“不及格”两组。
C#var passFailGroups = students.GroupBy(s => s.Score >= 80 ? "Pass" : "Fail").Select(g => new
{
Category = g.Key,
Students = g.ToList()
});
foreach (var group in passFailGroups)
{
Console.WriteLine($"Category: {group.Category}");
foreach (var student in group.Students)
{
Console.WriteLine($" - Class: {student.Class}, Score: {student.Score}");
}
}
我们可以使用元组或匿名类型将元素按多个键分组。假设我们要按班级和是否及格两个条件分组。
C#var multiKeyGroup = students.GroupBy(s => new { s.Class, Category = s.Score >= 80 ? "Pass" : "Fail" })
.Select(g => new
{
g.Key.Class,
g.Key.Category,
Students = g.ToList()
});
foreach (var group in multiKeyGroup)
{
Console.WriteLine($"Class: {group.Class}, Category: {group.Category}");
foreach (var student in group.Students)
{
Console.WriteLine($" - Score: {student.Score}");
}
}
通过上述例子,我们可以看到 C# 中的 Lambda 表达式和 GroupBy
方法如何帮助我们以极其简洁和有效的方式处理和分析数据。无论是基于单一属性还是多个属性的分组,或是根据特定条件进行分类,这些工具都能提供强大的支持。掌握了这些技巧,你将能够更加自如地处理复杂的数据集合,编写出更加简洁和高效的代码。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!