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

news2025/7/14 3:00:43

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

  • List<T>.Sort()
    • 方法签名
    • 使用场景
    • 示例
      • 升序
        • 实现效果
      • 降序
        • 实现效果
  • IEnumerable<T>.OrderBy()
    • 方法签名
    • 使用场景
    • 示例
    • 实现效果
  • Enumerable<T>.OrderByDescending()
    • 使用场景
    • 示例
    • 实现效果
  • 总结

在C#中,List<T> 类提供了多种方法来进行排序,最常用的是 Sort 方法和IEnumerable<T>中提供的扩展方法 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1841559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态网页制作技术

动态网页制作技术是一种利用脚本语言、数据库和服务器端程序来生成动态内容的网页技术。以下是常用的动态网页制作技术&#xff1a; 1.PHP&#xff1a;PHP是一种广泛使用的服务器端脚本语言&#xff0c;可以嵌入到HTML中&#xff0c;用于生成动态网页内容。它可以与各种数据库进…

FuTalk设计周刊-Vol.033

&#x1f525;AI漫谈 热点捕手 1、Stable Video Diffusion —— Stable Diffusion 推出的 AI 生成视频模型 Stable Video Diffusion 也是开源的&#xff0c;可以免费下载部署。支持文本/图片生成视频&#xff0c;最高支持 576*1024 分辨率 25 帧。 链接https://huggingface.…

APP开发需要多少钱?定制开发智慧指南

在移动互联网飞速发展的今天&#xff0c;APP已经成为人们日常生活和工作中不可或缺的一部分。那么&#xff0c;开发一款 APP 到底需要多少钱呢&#xff1f;APP 开发的费用因人而异&#xff0c;不同的开发公司、不同的开发团队、不同的项目需求&#xff0c;都会导致开发费用有所…

植物大战僵尸杂交版(极速下载,解锁全部植物,存档,只需要两分钟!!)

文章目录 下载夸克网盘百度网盘gitee下载压缩包/gitee拉取 安装解锁全部植物游戏技巧友情提示游戏背景(可不阅) 更多相关内容可查看 不说废话&#xff0c;先玩起来 下载 夸克网盘 有夸克网盘会员的直接用夸克网盘下载 原创作者&#xff1a;潜艇伟伟迷 B站地址&#xff1a;h…

落地灯哪个品牌最好?五款护眼大路灯汇总分享!

落地灯哪个品牌最好&#xff1f;要说我成为测评博主的职业生涯以来感触最深的&#xff0c;应该就是在选购各类家电是一定要亲身实践之后才能够分辨产品的好坏&#xff0c;大路灯也是如此&#xff0c;目前市面上的大路灯外观几乎都大同小异&#xff0c;但很多品牌在宣传方面做的…

Salia PLCC cPH2 远程命令执行漏洞(CVE-2023-46359)

漏洞描述 Salia PLCC cPH2 v1.87.0 及更早版本中存在一个操作系统命令注入漏洞&#xff0c;该漏洞可能允许未经身份验证的远程攻击者通过传递给连接检查功能的特制参数在系统上执行任意命令。 产品界面 fofa语法 "Salia PLCC" POC GET /connectioncheck.php?ip1…

视频与音频的交响:探索达摩院VideoLLaMA 2的技术创新

一、简介 文章&#xff1a;https://arxiv.org/abs/2406.07476 代码&#xff1a;https://github.com/DAMO-NLP-SG/VideoLLaMA2 VideoLLaMA 2是由阿里巴巴集团的DAMO Academy团队开发的视频大型语言模型&#xff08;Video-LLM&#xff09;&#xff0c;旨在通过增强空间-时间建模…

前端 JS 经典:数字变化动画

1. 需求 给你一个数字&#xff0c;当这个数字变化时&#xff0c;有一个动画的过渡效果。 2. 思路 首先我们要知道两个数字变化需要多少秒&#xff0c;然后变化的范围&#xff0c;算出变化的速度。记住开始变化的时间&#xff0c;然后通过 requestAnimationFrame 函数&#x…

【Python机器学习系列】针对特定数据构建管道流水线进行机器学习预测(案例+源码)

这是我的第305篇原创文章。 一、引言 机器学习项目中有可以自动化的标准工作流程。在 Python scikit-learn 中&#xff0c;管道有助于明确定义和自动化这些工作流程。使用pipeline后&#xff0c;我们每一步的输出都会自动的作为下一个的输入。一套完整的机器学习应用流程如下&a…

点亮LED灯(TMS570LS31HDK)

一、安装Code Composer studio&#xff08;CCS&#xff09; 1.ccs下载地址 2.ccs安装 学习文档 二、安装Hal Code Generator 下载地址 三、创建新的CCS项目&#xff08;TMDS570LS31HDK&#xff09; 详细步骤学习博客&#xff08;推荐这里学习&#xff09; 以下是大致步骤…

如何使用mvnd,随着mvnd的1.0.0发布,Maven构建速度提升了3倍不止。

maven-mvnd-1.0.0-m8-m40-windows-amd64 1、什么是 Mvnd呢 Mvnd 是 Apache Maven Daemon 的简称&#xff0c;是一个通过 GraalVM 构建的本地可执行文件&#xff0c;用于加速 Maven 构建。Mvnd 的设计理念是通过在后台运行一个守护进程来避免每次构建时启动新的 JVM&#xff0c…

学校为何青睐气膜体育馆:独特优势解析—轻空间

随着教育设施的不断升级&#xff0c;气膜体育馆因其独特的优势&#xff0c;逐渐成为学校建设的新宠。作为一种现代化的体育设施&#xff0c;气膜体育馆不仅满足了多种体育活动的需求&#xff0c;还在多方面表现出色&#xff0c;受到了广大师生和管理者的青睐。以下是学校使用气…

未雨绸缪!美银美林总结:美股牛市终结的十大指标

牛转熊的红灯逐渐亮起。美银美林总结十大股市见顶指标&#xff0c;当前指标触发进度条已达40%&#xff0c;平均达70%时牛市见顶。 前两日&#xff0c;在美股明星科技股的带领下&#xff0c;标普500指数又双叒创新高了。作为乐观派一方&#xff0c;高盛再度上调标普500指数的年底…

关于面试被面试官暴怼:“几年研究生白读” 的前因后果

中午一个网友来信说自己和面试官干起来了,看完他的描述真是苦笑不得,这年头是怎么了,最近互联网CS消息满天飞,怎么连面试官都SB起来了呢? 大概是这样的:这位网友面试时被问及了Serializable接口的底层实现原理,因为这是一个标识性的空接口,大部分同学在学习时都秉持着会…

js-hooker

该项目是对开源项目进行二开&#xff0c;改写的hook脚本&#xff0c;新增了cookie添加形式的捕获&#xff0c;若有侵权&#xff0c;请联系博主删除。 下面贴运行截图&#xff1a; 解释&#xff1a; 绿色&#xff1a; 新增cookie 红色 &#xff1a; 删除cookie 黄色 &…

java:动态代理和cglib代理的简单例子

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89457803 # 项目代码 【pom.xml】 <dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version&…

系统安全(补充)

拒绝服务漏洞&#xff08;拒绝服务漏洞将导致网络设备停止服务&#xff0c;危害网络服务可用性&#xff09;旁路&#xff08;旁路漏洞绕过网络设备的安全机制&#xff0c;使得安全措施没有效果&#xff09;代码执行&#xff08;该类漏洞使得攻击者可以控制网络设备&#xff0c;…

写给大数据开发:谈谈数仓建模的反三范式

在数仓建设中&#xff0c;我们经常谈论反三范式。顾名思义&#xff0c;反范式化指的是通过增加冗余或重复的数据来提高数据库的读性能。简单来说&#xff0c;就是浪费存储空间&#xff0c;节省查询时间。用行话讲&#xff0c;这就是以空间换时间。听起来像是用大炮打蚊子&#…

opencv 视频处理

概述 OpenCV 的视频模块是其核心组成部分之一&#xff0c;主要负责视频文件的读取、处理、分析以及视频流的捕获和输出。这一模块使得开发者能够轻松地处理来自摄像头、文件或其他视频源的视频数据&#xff0c;进行实时或离线的图像处理和计算机视觉任务。以下是 OpenCV 视频模…

唯一工业操作系统!蓝卓supOS入榜中国500最具价值品牌

6月19日 在第21届世界品牌大会上 世界品牌实验室(World Brand Lab) 正式发布2024年《中国500最具价值品牌》分析报告 蓝卓supOS 以131.65亿元的品牌价值成为 国内首个入榜工业操作系统 国内首个工业操作系统的蜕变之旅 蓝卓supOS快速迭代指数增长 不断引领海内外多个首…