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

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

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

在 C# 中,List 是一个非常有用的集合类型,它允许我们在一个变长的数组中存储和操作元素。当数据量较大时,我们可能需要对 List 中的元素进行排序,这时候可以使用 List.Sort() 方法进行排序。本文将介绍 List.Sort() 方法的使用方法和常见的排序方式。

List.Sort() 方法介绍

List.Sort() 方法是一个很方便的排序方法,在 List 中直接使用即可,它可以基于指定的比较方法对 List 中的元素进行排序。具体来说,List.Sort() 方法的定义如下:

public void Sort();
public void Sort(IComparer<T> comparer);  
public void Sort(Comparison<T> comparison);

其中,第一个 Sort() 方法表示默认的排序方式,使用元素的 IComparable.CompareTo 方法进行排序。第二个 Sort() 方法可以传入自定义的比较器(实现 IComparer 接口),可以根据自己的需求实现不同的比较方法。第三个 Sort() 方法可以传入一个委托函数(实现 Comparison 委托),表示使用自定义的比较方法对元素进行排序。

常见的排序方式
默认排序方式

默认的排序方式使用元素的 IComparable.CompareTo 方法进行排序。为了实现该方法,并使得 List.Sort() 方法可以正常工作,我们需要保证 List 中的元素类型实现了 IComparable 接口。

class Person: IComparable<Person>
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int CompareTo(Person other)
    {
        return this.Age.CompareTo(other.Age);
    }
}

List<Person> persons = new List<Person>
{
    new Person { Name = "Alice", Age = 20 },
    new Person { Name = "Bob", Age = 25 },
    new Person { Name = "Charlie", Age = 18 }
};

persons.Sort();  // 根据 Age 排序

foreach (var person in persons)
{
    Console.WriteLine($"{person.Name} {person.Age}");
}
自定义比较器

我们可以自定义一个比较器,然后使用 List.Sort() 方法的第二个重载来告诉它使用该比较器进行排序。这种方式对于那些不实现 IComparable 接口的类型也非常有用。

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

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

List<Person> persons = new List<Person>
{
    new Person { Name = "Alice", Age = 20 },
    new Person { Name = "Bob", Age = 25 },
    new Person { Name = "Charlie", Age = 18 }
};

var comparer = new AgeComparer();

persons.Sort(comparer);  // 根据 Age 排序

foreach (var person in persons)
{
    Console.WriteLine($"{person.Name} {person.Age}");
}
使用委托

List.Sort() 方法还可以接收一个委托作为参数,该委托表示使用什么比较方法对元素进行排序。这样可以更加方便的在 List.Sort() 调用的时候进行简单比较。

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

List<Person> persons = new List<Person>
{
    new Person { Name = "Alice", Age = 20 },
    new Person { Name = "Bob", Age = 25 },
    new Person { Name = "Charlie", Age = 18 }
};

persons.Sort((x, y) => y.Age.CompareTo(x.Age));  // 根据 Age 逆序排序

foreach (var person in persons)
{
    Console.WriteLine($"{person.Name} {person.Age}");
}
总结

在 C# 中,List.Sort() 方法是一个非常方便的方法,可以根据自己的需求使用不同的比较方式对元素进行排序。具体使用时可以根据需要选择默认排序方式、自定义比较器、委托等方法来实现排序。