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接口,并在其中定义比较逻辑。然后将这个类的实例作为参数传递给List.Sort方法。

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接口。这样,类的实例就可以直接使用默认的Sort方法(不带参数)进行排序。

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进行自定义排序。选择哪种方法取决于你的具体需求和偏好。在大多数情况下,Lambda表达式和LINQ方法是最常用和简洁的方式来实现自定义排序。如果你需要重复使用相同的排序逻辑,并且它是类固有的,那么在类内部实现IComparable接口可能是更好的选择。

posted @   海一粟  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示