C# 排序的多种实现方式(经典)

一、 对数组进行排序

最常见的排序是对一个数组排序,比如:

 int[] aArray = new int[8] { 18, 17, 21, 23, 11, 31, 27, 38 };

 1、利用冒泡排序进行排序:

(即每个值都和它后面的数值比较,每次拿出最小值)


static void Main(string[] args){int[] aArray = new int[8] { 18, 17, 21, 23, 11, 31, 27, 38 };for (int j = 0; j < aArray.Length - 1; j++){for (int i = 0; i < aArray.Length - 1; i++){if (aArray[i] > aArray[i + 1]){int temp = aArray[i];aArray[i] = aArray[i + 1];aArray[i + 1] = temp;}}}foreach (var a in aArray){Console.Write($"{a} ");}Console.ReadKey();}

运行结果:

2、利用Array.Sort排序:

1升序
 static void Main(string[] args){int[] aArray = new int[8] { 18, 17, 21, 23, 11, 31, 27, 38 };Array.Sort(aArray);foreach (var a in aArray){Console.Write($"{a} ");}Console.ReadKey();}

运行结果:

2降序:

 先升序排列,然后对数组反转

 static void Main(string[] args){int[] aArray = new int[8] { 18, 17, 21, 23, 11, 31, 27, 38 };Array.Sort(aArray);//数组排序(默认升序)Array.Reverse(aArray);//数组反转foreach (var a in aArray){Console.Write($"{a} ");}Console.ReadKey();}

运行结果:

二、对List进行排序

  大多数时候,我们需要将list集合里面的数据进行排序,

1、利用List<T> 自带的Sort排序方法 

    1 、升序排序
aList.Sort();
2、降序排序
  aList.Sort();//升序aList.Reverse();//反转
3 sort也可以用如下方式操作:

list.Sort((a, b) => a.CompareTo(b));//升序
list.Sort((a, b) => b.CompareTo(a));//降序

2、利用List的OrderBy与OrderByDescending方法

    升序排列:
List<int> aList = new List<int> { 18, 17, 21, 23, 11, 31, 27, 38 };aList = aList.OrderBy(a => a).ToList();
降序排列:
 List<int> aList = new List<int> { 18, 17, 21, 23, 11, 31, 27, 38 };aList = aList.OrderByDescending(a => a).ToList();
利用link,这种感觉和方法二是一回事
List<int> aList = new List<int> { 18, 17, 21, 23, 11, 31, 27, 38 };aList = (from a in aList orderby a ascending select a).ToList();//升序aList = (from a in aList orderby a descending select a).ToList();//降序

如果集合里存放的是一个类型,比如:

学生类:

 public class Student{public string name { get; set; }public int age { get; set; }public int score { get; set; }public override string ToString(){return $"姓名是:{name},年龄是:{age},得分是:{score}";}}

方法一:stuList.Sort((x, y) => x.score.CompareTo(y.score));

static void Main(string[] args){List<Student> stuList = new List<Student>{new Student() {name = "zyr", age = 23, score = 99},new Student() {name = "zls", age = 25, score = 95},new Student() {name = "zsq", age = 27, score = 100},new Student() {name = "zlw", age = 15, score = 69},new Student() {name = "ywe", age = 17, score = 72},new Student() {name = "asw", age = 29, score = 58}};//方法1 升序//stuList.Sort((x, y) => x.score.CompareTo(y.score));stuList = stuList.OrderBy(stu=>stu.score).ToList();foreach (var stu in stuList){Console.WriteLine($"{stu}");}Console.ReadKey();}

方法二: 加入这个学生成绩有重复的,对于重复的成绩按照年龄再排序:
 方法1 升序stuList.Sort((x, y) =>{int ret = x.score.CompareTo(y.score);if (ret == 0){return x.age.CompareTo(y.age);}else{return ret;}});方法2 升序stuList = stuList.OrderBy(stu => stu.score).ThenBy(stu => stu.age).ToList();

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

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

相关文章

linux设置Nacos自启动

前提&#xff1a;已经安装好nacos应用 可参考&#xff1a;Nacos单机版安装-CSDN博客 1. 创建nacos.service 1.1 在 /lib/systemd/system 目录底下&#xff0c;新建nacos.service文件 [Unit] Descriptionnacos Afternetwork.target[Service]Typeforking# 单机启动方式&#…

Qt实现无边框圆角窗口

我们在使用QDialog的时候许多场景下都不需要默认的标题栏&#xff0c;这时候我们需要设置他的标志位。 this->setWindowFlags(Qt::FramelessWindowHint);由于现代的窗口风格&#xff0c;我们一般会设置窗口为圆角边框的样式&#xff0c;我们可以使用qss的方式来进行设置。 …

STM32——超声测距HC_SR04记录

一、HC_SR04简述 HC-SR04超声波测距模块可提供 2cm-400cm的非接触式距离感测功能&#xff0c;测距精度可达高到 3mm&#xff1b;模块包括超声波发射器、接收器与控制电路。 基本工作原理&#xff1a; (1)采用IO 口TRIG 触发测距&#xff0c;给最少10us 的高电平信呈。 (2)模块…

自定义 Unity Scene 的界面工具

介绍 文档中会进行SceneView的自定义扩展&#xff0c;实现显示常驻GUI和添加自定义叠加层&#xff08;Custom Overlay&#xff09;。 最近项目开发用回了原生的Unity UI相关内容。对于之前常用的FairyGUI来说&#xff0c;原生的UGUI对于UI同学来讲有些不太方便。再加上这次会…

自定义口令加入群聊怎么弄?用词令关键词直达口令加入微信群延长群二维码7天有效方法

微信口令加入群聊有二种方式 一、微信面对面建群 微信面对面建群的方式适合现实中的朋友之间相互认识且想要建立群聊的场景。微信面对面建群口令加入群聊的有效距离是在几十米范围内&#xff0c;因此只能是附近几十米范围内的人&#xff0c;正确输入微信面对面建群口令后才可…

台球王子,Android小游戏开发

使用 Android Studio 开发了一款休闲游戏 —— 《台球王子》 关键词&#xff1a;台球 A. 项目描述 台球作为一项优雅、策略性强的运动&#xff0c;在众多游戏类型中却相对较少。因此&#xff0c;开发《台球王子》小游戏&#xff0c;可以让更多玩家能够轻松享受到台球的乐趣。…

Python问题列表

文章目录 1、使用pip安装的模块都存放到哪里了&#xff1f;2、安装fitz包报错&#xff0c;如何解决&#xff1f;3、python代码运行时&#xff0c;控制台输出乱码如何解决。4、vscode中第三方库不自动补齐 1、使用pip安装的模块都存放到哪里了&#xff1f; 答&#xff1a; pip是…

易图讯智慧感知应急指挥三维电子沙盘系统设计

易图讯&#xff08;www.3dgis.top&#xff09;智慧感知应急指挥三维电子沙盘系统充分融合了物联网与人工智能识别分析技术&#xff0c;实现了从输入到输出的高效智能响应。在物联网方面&#xff0c;系统通过各类传感器和设备&#xff0c;实时采集环境、设备状态等关键数据&…

Adobe ColdFusion 任意文件读取漏洞复现(CVE-2024-20767)

0x01 产品简介 Adobe ColdFusion是美国奥多比(Adobe)公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言,将可扩展、改变游戏规则且可靠的产品的愿景变为现实。 0x02 漏洞概述 由于 Adobe ColdFusion 的访问控制不当,未经身份认证的远程攻击者可以构造恶…

享道出行:容器弹性技术驱动下的智慧出行稳定性实践

作者&#xff1a;郑嘉扬、何杉 前言 享道出行是一家专注于出行服务的专业品牌&#xff0c;是上汽集团实现汽车产业“新四化”&#xff08;即“电动化、智能网联化、共享化、国际化”&#xff09;的重要组成部分。作为上汽集团移动出行战略品牌&#xff0c;享道出行充分利用全…

【C++】list介绍

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. list介绍2. list的构造3. ist iterator的使用4. capacity5. element access6. modifiers7. 迭代器失效8. Operations8.1 reverse8.2 sort8.3 unique8.4 splice 1. list介绍 list是可以在常数范围内在任意位置进行插…

JumpServer 堡垒主机

JumpServer 堡垒机帮助企业以更安全的方式管控和登陆各种类型的资产 SSH&#xff1a;Linux/Unix/网络设备等Windows&#xff1a;Web方式连接/原生RDP连接数据库&#xff1a;MySQL、Oracle、SQLServer、PostgreSQL等Kubernetes&#xff1a;连接到K8s集群中的PodsWeb站点&#x…

微信小程序wx.navigateTo无法跳转到Component组件问题解决。(共享元素动画必备)

关于Component构造器官方是有文档说明的&#xff0c;然后官方文档内部也给出了组件是可以通过像pages一样跳转的。但是官方文档缺少了必要的说明&#xff0c;会引起wx.navigateTo无法跳转到组件问题&#xff01; 以下是官方文档截图&#xff1a; 解决方式&#xff1a; 组件创建…

吴恩达2022机器学习专项课程(一) 4.2 梯度下降实践

问题预览/关键词 本节内容梯度下降更新w的公式梯度下降更新b的公式的含义α的含义为什么要控制梯度下降的幅度&#xff1f;导数项的含义为什么要控制梯度下降的方向&#xff1f;梯度下降何时结束&#xff1f;梯度下降算法收敛的含义正确更新梯度下降的顺序错误更新梯度下降的顺…

【软件安装】(十四)Ubuntu22.04安装Psensor硬件监视器

一个愿意伫立在巨人肩膀上的农民...... Ubuntu系统硬件运行查询输入指令太繁琐&#xff0c;终端展示不直观&#xff0c;因此这款具有可视化监控Ubuntu系统下当前电脑的硬件CPU&#xff08;中央处理器&#xff09;、GPU&#xff08;显卡&#xff09;和硬盘等温度等功能&#xff…

微信支付平台与微信服务号关联配置要点

目录 JSAPI支付 前期资料及相关准备 申请微信服务号 服务号配置要点 微信认证 基本配置 功能设置 申请微信支付号 支付号配置要点 设置操作密码 API安全 开发设置 与服务号关联 小结 JSAPI支付 我们的开发应用场景以JSAPI支付为举例&#xff0c;这也是常用的一…

Python读取PDF文字转txt,解决分栏识别问题,能读两栏

搜索了一下&#xff0c;大致有这些库能将PDF转txt 1. PyPDF/PyPDF2&#xff08;截止2024.03.28这两个已经合并成了一个&#xff09;pypdf PyPI 2. pdfplumber GitHub - jsvine/pdfplumber: Plumb a PDF for detailed information about each char, rectangle, line, et cete…

MATLAB多级分组绘图及图例等细节处理 ; MATLAB画图横轴时间纵轴数值按照不同sensorCode分组画不同sensorCode的曲线

平时研究需要大量的绘图Excel有时候又臃肿且麻烦 尤其是当处理大量数据时可能会拖死Windows 示例代码及数据量展示 因为数据量是万级别的折线图也变成"柱状图"了, 不过还能看出大致趋势! 横轴是时间纵轴是传感器数值图例是传感器所在深度 % data readtable(C:\U…

Network AIS Receiver R400N

目录 Introduction OVERVIEW BASIC FEATURES APPLICATIONS SPECIFICATIONS Introduction OVERVIEW The R400N provides a method of monitoring the position, speed and heading of AIS vessels within VHF range. It can decode of Class A, Class B, Aids to Navigat…

鸿蒙OS开发实例:【Web网页】

背景 HarmonyOS平台通过Web控件可支持网页加载展示&#xff0c;Web在中是作为专项参考的。 本篇文章将从Android和iOS平台研发角度出发来实践学习API功能 说明 整个示例是以HarmonyOS开发文档网址作为加载目标页面布局增加了三个按钮“后退”&#xff0c;“前进”&#xff…