C#开发-集合使用和技巧(八)集合中的排序Sort、OrderBy、OrderByDescending

C#开发-集合使用和技巧(八)集合中的排序Sort、OrderBy、OrderByDescending

在C#中,List<T> 类提供了多种方法来进行排序,最常用的是 Sort 方法和IEnumerable<T>中提供的扩展方法 OrderBy/OrderByDescending 方法。这些方法可以按照特定的顺序重新排列列表中的元素。

List.Sort()

Sort 方法会对列表中的元素进行原地排序,改变原始列表的顺序。

方法签名

csharp 复制代码
public void Sort();
public void Sort(IComparer<T> comparer);
public void Sort(Comparison<T> comparison);

使用场景

  • 当你想要直接修改现有列表的顺序时。

示例

升序

csharp 复制代码
using System;
using System.Collections.Generic;

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

public class Program
{
    public static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "张三", Age = 20 },
            new Student { Name = "李四", Age = 18 },
            new Student { Name = "王五", Age = 22 }
        };

        // 使用 Sort 方法按年龄排序
        students.Sort((x, y) => x.Age.CompareTo(y.Age));

        // 输出排序后的学生名单
        foreach (var student in students)
        {
            Console.WriteLine($"{student.Name}, {student.Age}");
        }
    }
}

在这个例子中,Sort 方法根据学生的年龄对学生列表进行了升序排序。

实现效果

降序

csharp 复制代码
//降序
 students.Sort((x, y) => -x.Age.CompareTo(y.Age));
 //或
  students.Sort((x, y) => y.Age.CompareTo(x.Age));
实现效果

IEnumerable.OrderBy()

OrderBy 是 LINQ 提供的方法,它可以创建一个排好序的新列表,不会改变原始列表的顺序。

方法签名

csharp 复制代码
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);

使用场景

  • 当你不希望改变原始列表的顺序,而是想得到一个新的有序列表时。

示例

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;

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

public class Program
{
    public static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "张三", Age = 20 },
            new Student { Name = "李四", Age = 18 },
            new Student { Name = "王五", Age = 22 }
        };

        // 使用 OrderBy 方法按年龄排序
        var sortedStudents = students.OrderBy(s => s.Age);

        // 输出排序后的学生名单
        foreach (var student in sortedStudents)
        {
            Console.WriteLine($"{student.Name}, {student.Age}");
        }
    }
}

在这个例子中,OrderBy 方法根据学生的年龄创建了一个新的有序列表,原始列表 students 保持不变。

实现效果

Enumerable.OrderByDescending()

OrderByDescending 也是 LINQ 提供的方法,类似于 OrderBy,但是它是按照降序排序。

使用场景

  • 当你需要按降序排序时。

示例

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;

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

public class Program
{
    public static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "张三", Age = 20 },
            new Student { Name = "李四", Age = 18 },
            new Student { Name = "王五", Age = 22 }
        };

        // 使用 OrderByDescending 方法按年龄降序排序
        var sortedStudentsDesc = students.OrderByDescending(s => s.Age);

        // 输出排序后的学生名单
        foreach (var student in sortedStudentsDesc)
        {
            Console.WriteLine($"{student.Name}, {student.Age}");
        }
    }
}

在这个例子中,OrderByDescending 方法根据学生的年龄创建了一个新的降序列表,原始列表 students 保持不变。

实现效果

总结

总结来说,如果你想要改变原始列表的顺序,使用 Sort;如果你不想改变原始列表的顺序,而是想得到一个新的有序列表,使用 OrderByOrderByDescending

相关推荐
basketball616几秒前
设计模式入门:2. 工厂模式详解 C++实现
开发语言·c++·设计模式
Lumbrologist几秒前
【C++】零基础入门 · 第 16 节:智能指针
开发语言·c++
yu85939581 分钟前
MATLAB 分支定界法(Branch and Bound)实现
开发语言·matlab
tealcwu3 分钟前
【Unity实战】Unity IAP 5.3 中实现 Windows Custom Store 实战教程
windows·unity·游戏引擎
学会去珍惜7 分钟前
c语言编程 C语言入门 c语言(C语言程序设计教程 c语言视频教程 c语言零基础
c语言·开发语言
迈巴赫车主10 分钟前
优先队列(PriorityQueue)
数据结构·算法
AI 编程助手GPT22 分钟前
ChatGPT 新手入门与实战操作指南
开发语言·人工智能·git·python·chatgpt
Brilliantwxx22 分钟前
【C++】 红黑树封装 STL set/map 超详细解析
开发语言·c++
程序大视界26 分钟前
【C++ 从基础到项目实战】C++(八):运算符重载——让你的类用起来像内置类型
开发语言·c++·cpp
原创小甜甜28 分钟前
OOM 排查复盘:Hutool 序列化 Request 导致 Java Heap Space
java·开发语言·python