📜  列表排序 c# (1)

📅  最后修改于: 2023-12-03 15:36:52.069000             🧑  作者: Mango

列表排序 in C#

在开发应用程序的过程中,有时需要按照一定的规则对列表进行排序。C# 提供了多种排序方式,如升序、降序、自定义排序等。本文将介绍 C# 中的列表排序,并提供相应的代码示例。

单一属性排序

假设有一个学生类,包含学生姓名和年龄两个属性,需要在列表中按照年龄进行排序。可以使用 List<T> 类的 Sort 方法实现排序,如下所示:

class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

List<Student> students = new List<Student>
{
    new Student { Name = "张三", Age = 18 },
    new Student { Name = "李四", Age = 20 },
    new Student { Name = "王五", Age = 16 }
};

students.Sort((s1, s2) => s1.Age.CompareTo(s2.Age));

这里介绍了两种排序方式,一种是通过委托方式,第二种是通过 lambda 表达式方式,都可以实现相同的排序效果,具体选择哪种方式视个人习惯而定。

多个属性排序

当需要按照多个属性进行排序时,可以使用 OrderByThenByOrderByDescendingThenByDescending 等方法。例如,如果需要首先按照年龄进行升序排序,如果年龄相同,再按照姓名进行升序排序,可以这样写:

students = students.OrderBy(s => s.Age).ThenBy(s => s.Name).ToList();

如果需要按照年龄进行升序排序,如果年龄相同,再按照姓名进行降序排序,可以这样写:

students = students.OrderBy(s => s.Age).ThenByDescending(s => s.Name).ToList();
自定义排序

有时需要进行自定义排序,例如按照字母表顺序排序,或者按照某个复杂算法排序。可以使用 List<T> 类的 Sort 方法,传入一个 Comparison<T> 委托,自定义比较规则。例如,需要按照字母表顺序对字符串列表 list 进行排序,可以这样写:

List<string> list = new List<string> { "hello", "world", "csharp", "program" };

list.Sort((a, b) => a.CompareTo(b));

Console.WriteLine(string.Join(", ", list));  // 输出 "csharp, hello, program, world"
总结

在 C# 中,通过 List<T> 类提供的排序方法,可以实现多种排序方式,包括单一属性排序、多个属性排序和自定义排序。程序员可以根据实际需要选择合适的排序方式。