📅  最后修改于: 2023-12-03 15:36:52.069000             🧑  作者: Mango
在开发应用程序的过程中,有时需要按照一定的规则对列表进行排序。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 表达式方式,都可以实现相同的排序效果,具体选择哪种方式视个人习惯而定。
当需要按照多个属性进行排序时,可以使用 OrderBy
、ThenBy
、OrderByDescending
、ThenByDescending
等方法。例如,如果需要首先按照年龄进行升序排序,如果年龄相同,再按照姓名进行升序排序,可以这样写:
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>
类提供的排序方法,可以实现多种排序方式,包括单一属性排序、多个属性排序和自定义排序。程序员可以根据实际需要选择合适的排序方式。