Person 類定義
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
// 如果需要的話,可以在這裡實現 IComparable<Person> 介面
// 但為了示例的簡潔性,我們在這裡不實現它
}
對 List 進行自定義排序的方法
在C#中,對List
1. 實現 IComparer 介面
建立一個類來實現IComparer
public class PersonAgeComparer : IComparer<Person>
{
public int Compare(Person x, Person y)
{
return x.Age.CompareTo(y.Age);
}
}
// 使用方法
List<Person> people = ... // 初始化Person列表
people.Sort(new PersonAgeComparer());
2. 使用 Lambda 表示式或匿名方法
在呼叫Sort方法時直接傳遞一個Lambda表示式或匿名方法來定義比較邏輯。
// 使用Lambda表示式
people.Sort((p1, p2) => p1.Age.CompareTo(p2.Age));
// 使用匿名方法(較少使用,因為Lambda更簡潔)
people.Sort(delegate(Person p1, Person p2) { return p1.Age.CompareTo(p2.Age); });
3. 在類內部實現 IComparable 介面
如果排序邏輯是類固有的,可以在類內部實現IComparable
public class Person : IComparable<Person>
{
// ... 其他屬性和方法 ...
public int CompareTo(Person other)
{
return this.Age.CompareTo(other.Age);
}
}
// 使用方法(不需要傳遞比較器)
people.Sort(); // 假設Person類已經實現了IComparable<Person>介面
4. 使用 LINQ 的 OrderBy 或 ThenBy 方法(不修改原始列表)
如果你不想修改原始列表,而是想建立一個新的已排序列表,可以使用LINQ的OrderBy和ThenBy方法。
var sortedPeople = people.OrderBy(p => p.Age).ToList();
var sortedPeopleByMultipleFields = people.OrderBy(p => p.LastName).ThenBy(p => p.FirstName).ToList(); // 假設Person類有LastName屬性
總結
以上四種方法都可以用來對List