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

相关推荐
浪子明X7 小时前
十六位账本怎样发现传输差错:Internet Checksum 生活类比
开发语言
TimberWill9 小时前
windows终端分屏设置
windows
xiangyun6110 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun6110 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
OKkankan11 小时前
LangChain 能力详解!:输出解析、RAG、向量数据库与 Retriever 检索器
数据结构·python·langchain·ai应用
蓝速科技11 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
唐青枫11 小时前
对象到底住在哪里?C#.NET 托管堆从分配、GC 到内存排查
c#·.net
白远山12 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析
xxwxx__12 小时前
C++ AVL 树深度剖析:平衡二叉搜索树原理、源码与面试考点
数据结构·c++
Logic10112 小时前
C语言/数据结构数组题解:数字列表加一(Plus One)——进位处理与数组扩展
c语言·数据结构·模拟·数组·时间复杂度·算法题·进位