一、分组简介
在实际开发中,我们经常会遇到需要将数据按照某个规则进行分组的情况,比如根据学校进行成绩排名、根据省份进行广告投放等等。如果使用传统的方式,可能需要编写很多繁琐冗长的代码。而C#的List类提供了很方便的分组功能,可以大大简化我们的开发流程。
二、分组实现
1、根据单个属性分组
在List中,我们可以使用GroupBy方法进行分组,传入一个lambda表达式作为分组依据,以下是根据一个Person类中的Age属性进行分组的示例代码:
List persons = new List(); //添加数据 var groups = persons.GroupBy(p => p.Age); foreach (var group in groups) { Console.WriteLine("Age Group: " + group.Key); foreach (var person in group) { Console.WriteLine("\t" + person.Name); } }
上面的示例代码中,Age属性作为分组依据,GroupBy方法返回的是一个以Age为键、以Person列表为值的字典。
2、根据多个属性分组
如果需要根据多个属性进行分组,可以在lambda表达式中使用匿名类型作为分组依据,以下是根据一个Person类中的Age和Gender属性进行分组的示例代码:
List persons = new List(); //添加数据 var groups = persons.GroupBy(p => new { p.Age, p.Gender }); foreach (var group in groups) { Console.WriteLine("Age and Gender Group: " + group.Key.Age + ", " + group.Key.Gender); foreach (var person in group) { Console.WriteLine("\t" + person.Name); } }
上面的示例代码中,使用了一个包含Age和Gender属性的匿名类型作为分组依据,GroupBy方法返回的是一个以该匿名类型为键、以Person列表为值的字典。
3、根据简单对象分组
除了基本类型和匿名类型外,我们还可以使用自定义类型进行分组。只需要让自定义类型实现IEqualityComparer接口并重写Equals和GetHashCode方法即可。以下是根据一个自定义的Student类进行分组的示例代码:
public class Student { public string Name { get; set; } public int Age { get; set; } public string Province { get; set; } public class GroupComparer : IEqualityComparer { public bool Equals(Student x, Student y) { return x.Province.Equals(y.Province); } public int GetHashCode(Student obj) { return obj.Province.GetHashCode(); } } } List students = new List(); //添加数据 var groups = students.GroupBy(s => s, new Student.GroupComparer()); foreach (var group in groups) { Console.WriteLine("Province Group: " + group.Key.Province); foreach (var student in group) { Console.WriteLine("\t" + student.Name); } }
三、小结
以上就是C# List实现分组功能的三种方法,分别根据单个属性分组、根据多个属性分组以及根据自定义类型进行分组。使用这些方法可以很方便地对数据进行分类统计和分析。在实际开发中,我们需要灵活运用这些方法,根据不同的需求来选择合适的分组方式。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/244347.html