📅  最后修改于: 2023-12-03 15:24:27.948000             🧑  作者: Mango
在 C# 中,List 是一个非常有用的集合类型,它允许我们在一个变长的数组中存储和操作元素。当数据量较大时,我们可能需要对 List 中的元素进行排序,这时候可以使用 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() 方法是一个非常方便的方法,可以根据自己的需求使用不同的比较方式对元素进行排序。具体使用时可以根据需要选择默认排序方式、自定义比较器、委托等方法来实现排序。