C#关于List<T>的自定义排序学习笔记
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

浙公网安备 33010602011771号