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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)