如何在C#中使⽤List对元素进⾏排序?

在 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 的 OrderByOrderByDescending 方法

  • 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需要排序后生成新集合查询表达式简洁优雅,支持链式操作

根据需求选择合适的排序方式,既能保证代码的可读性,又能提升性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面试八股文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值