在 C# 中,可以使用 List<T>
对元素进行排序。以下是几种常见的排序方式:
1. 使用 Sort()
方法
Sort()
是List<T>
提供的内置方法,可以对元素进行默认排序。- 元素类型必须实现
IComparable<T>
接口(如int
,string
等内置类型)。
示例代码
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 5, 3, 8, 1, 2 };
numbers.Sort(); // 默认升序排序
Console.WriteLine("Sorted List: " + string.Join(", ", numbers));
}
}
输出
Sorted List: 1, 2, 3, 5, 8
2. 使用 Sort(Comparison<T>)
方法
- 使用自定义比较逻辑,通过传入
Comparison<T>
委托定义排序规则。
示例代码
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 5, 3, 8, 1, 2 };
numbers.Sort((x, y) => y.CompareTo(x)); // 自定义降序排序
Console.WriteLine("Sorted List: " + string.Join(", ", numbers));
}
}
输出
Sorted List: 8, 5, 3, 2, 1
3. 使用 Sort(IComparer<T>)
方法
- 提供一个实现了
IComparer<T>
接口的自定义比较器类。
示例代码
using System;
using System.Collections.Generic;
class DescendingComparer : IComparer<int>
{
public int Compare(int x, int y)
{
return y.CompareTo(x); // 降序比较
}
}
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 5, 3, 8, 1, 2 };
numbers.Sort(new DescendingComparer()); // 使用自定义比较器
Console.WriteLine("Sorted List: " + string.Join(", ", numbers));
}
}
输出
Sorted List: 8, 5, 3, 2, 1
4. 使用 LINQ 的 OrderBy
和 OrderByDescending
方法
LINQ
提供的查询语法适合排序后返回新集合。
示例代码
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 5, 3, 8, 1, 2 };
// 升序排序
var sortedAsc = numbers.OrderBy(x => x).ToList();
Console.WriteLine("Ascending: " + string.Join(", ", sortedAsc));
// 降序排序
var sortedDesc = numbers.OrderByDescending(x => x).ToList();
Console.WriteLine("Descending: " + string.Join(", ", sortedDesc));
}
}
输出
Ascending: 1, 2, 3, 5, 8
Descending: 8, 5, 3, 2, 1
5. 对复杂对象列表排序
- 对象列表可以基于某个属性排序。
示例代码
using System;
using System.Collections.Generic;
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
List<Person> people = new List<Person>
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 35 }
};
// 按 Age 升序排序
people.Sort((p1, p2) => p1.Age.CompareTo(p2.Age));
foreach (var person in people)
{
Console.WriteLine($"{person.Name}, {person.Age}");
}
}
}
输出
Bob, 25
Alice, 30
Charlie, 35
总结
排序方式比较
方法 | 使用场景 | 优势 |
---|---|---|
Sort() | 默认排序(支持 IComparable<T> 类型) | 简单高效 |
Sort(Comparison<T>) | 自定义排序规则 | 灵活性强 |
Sort(IComparer<T>) | 使用多种复杂比较逻辑 | 可重用比较逻辑 |
LINQ 的 OrderBy / OrderByDescending | 需要排序后生成新集合 | 查询表达式简洁优雅,支持链式操作 |
根据需求选择合适的排序方式,既能保证代码的可读性,又能提升性能。