一、分組簡介
在實際開發中,我們經常會遇到需要將數據按照某個規則進行分組的情況,比如根據學校進行成績排名、根據省份進行廣告投放等等。如果使用傳統的方式,可能需要編寫很多繁瑣冗長的代碼。而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/zh-hant/n/244347.html