📜  如何在C#中对列表进行排序List.Sort()方法集-2(1)

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

如何在C#中对列表进行排序 List.Sort()方法集-2

在C#中,List是一个非常常用的数据结构。有时候我们需要按照某个属性对List进行排序。这时候我们可以使用List.Sort()方法来实现。本文将介绍在C#中对列表进行排序 List.Sort()方法集。

List.Sort()方法简介

List.Sort()方法可以根据指定的比较器对List中的元素进行排序。比较器是一个实现了IComparer接口的类或Lambda表达式。该方法执行的是就地排序,也就是说,排序后的元素在原有的List中。List.Sort()方法返回值为void。

对某属性进行排序

我们假设有一个类Person,该类有Name、Age两个属性。我们希望对List中的Person对象按照Name属性进行升序排序。那么我们需要定义一个比较器,该比较器可以实现IComparer接口。

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

public class PersonNameComparer : IComparer<Person>
{
    public int Compare(Person x, Person y)
    {
        return x.Name.CompareTo(y.Name);
    }
}

定义好比较器之后,我们可以使用List.Sort()方法对List进行排序。

List<Person> persons = new List<Person>();
persons.Add(new Person { Name = "Tom", Age = 20 });
persons.Add(new Person { Name = "John", Age = 25 });
persons.Add(new Person { Name = "Mary", Age = 22 });

persons.Sort(new PersonNameComparer());

排序后的结果如下:

| Name | Age | | ---- | --- | | John | 25 | | Mary | 22 | | Tom | 20 |

使用Lambda表达式进行排序

除了定义一个实现了IComparer接口的比较器类外,我们还可以使用Lambda表达式来实现比较器。

继续以上述Person类为例,我们要对List按照Age属性进行降序排序,可以通过下面的Lambda表达式实现。

persons.Sort((x, y) => y.Age.CompareTo(x.Age));

排序后的结果如下:

| Name | Age | | ---- | --- | | John | 25 | | Mary | 22 | | Tom | 20 |

对非基本类型进行排序

对于非基本类型,比如一个自定义的类Student,我们同样可以使用List.Sort()方法对其进行排序。只需要定义一个比较器来实现比较即可。

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

public class StudentScoreComparer : IComparer<Student>
{
    public int Compare(Student x, Student y)
    {
        return y.Score.CompareTo(x.Score);
    }
}

使用方式与前面的示例相同。

List<Student> students = new List<Student>();
students.Add(new Student { Name = "Tom", Age = 20, Score = 80 });
students.Add(new Student { Name = "John", Age = 25, Score = 90 });
students.Add(new Student { Name = "Mary", Age = 22, Score = 85 });

students.Sort(new StudentScoreComparer());

排序后的结果如下:

| Name | Age | Score | | ---- | --- | ----- | | John | 25 | 90 | | Mary | 22 | 85 | | Tom | 20 | 80 |

总结

本文介绍了如何使用List.Sort()方法对列表进行排序,包括了对基本类型和自定义类型进行排序的示例。List.Sort()方法是C#提供的一个非常便捷的排序方法,灵活使用可以方便地对List进行排序。