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


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

    List.Sort()

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

    方法签名

    public void Sort();
    public void Sort(IComparer<T> comparer);
    public void Sort(Comparison<T> comparison);
    

    使用场景

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

    示例

    升序

    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 方法根据学生的年龄对学生列表进行了升序排序

    实现效果

    在这里插入图片描述

    降序

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

    在这里插入图片描述

    IEnumerable.OrderBy()

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

    方法签名

    public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
    

    使用场景

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

    示例

    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,但是它是按照降序排序。

    使用场景

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

    示例

    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

  • 相关阅读:
    Android/Automotive 多声道录音支持
    【回归预测】基于SSA-BP(麻雀搜索算法优化BP神经网络)的回归预测 多输入单输出【Matlab代码#69】
    k8s高可用集群搭建(三)
    基于Keil a51汇编 —— MPL 宏定义
    C语言——局部和全局变量
    springBoot 一表多sheet页导入导出excel ---工具类,实体类,测试类 代码(全)
    Git 代码提交注释管理规范
    STM32G0 定时器PWM DMA输出驱动WS2812配置 LL库
    【软件与系统安全笔记】三、基础技术
    代理模式和单一职责原理一文读懂(设计模式与开发实践 P6)
  • 原文地址:https://blog.csdn.net/qq_39427511/article/details/139815743