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();

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE初阶-线程3

文章目录 一、线程安全问题-内存可见性二、等待通知2.1 wait()方法2.2 notify()方法 一、线程安全问题-内存可见性 import java.util.Scanner;public class Demo27 {private static int count0;//下面这段代码会出现内存的可见性问题//将从内存中读取count值的操作称为load 判…

MySQL常见故障案例与优化介绍

前言 MySQL故障排查的意义在于及时识别并解决数据库系统中的问题&#xff0c;确保数据的完整性和可靠性&#xff1b;而性能优化则旨在提高数据库系统的效率和响应速度&#xff0c;从而提升用户体验和系统整体性能。这两方面的工作都对于保证数据库系统稳定运行、提升业务效率和…

总结:微信小程序中跨组件的通信、状态管理的方案

在微信小程序中实现跨组件通信和状态管理,有以下几种主要方案: 事件机制 通过事件机制可以实现父子组件、兄弟组件的通信。 示例: 父组件向子组件传递数据: 父组件: <child binddata"handleChildData" /> 子组件: Component({..., methods: { handleChildData(…

【经验分享】Ubuntu下如何解决问题arm-linux-gcc:未找到命令

【经验分享】Ubuntu下如何解决问题arm-linux-gcc&#xff1a;未找到命令 前言问题分析解决方法 前言 在编译过程中发现一个问题&#xff0c;明明之前安装了gcc-4.6版本&#xff0c;版本信息都是正常显示的&#xff0c;刚安装上去的时候也是可以用的。但不知道什么原因突然不能…

【LDLTS】拉普拉斯深能级瞬态光谱

Laplace deep level transient spectroscopy&#xff08;拉普拉斯深能级瞬态光谱&#xff0c;简称LDLTS&#xff09;是一种用于分析和表征半导体材料中深层能级缺陷的技术。它是传统能级瞬态光谱&#xff08;DLTS&#xff09;方法的扩展和改进&#xff0c;特别适用于解决传统DL…

穿山甲广告平台SDK接入效果怎么样?

广告收入是大多数开发者的应用变现收入来源&#xff0c;如何进行流流量变现是从应用设计之初就需要开发者思考的问题。 穿山甲广告平台作为国内第三方广告变现平台&#xff0c;是不少开发者选择的对接平台。 穿山甲广告平台的广告类型较多&#xff0c;有信息流&#xff0c;ba…

Chatgpt掘金之旅—有爱AI商业实战篇|文案写作|(三)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、前言 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着AI技术的快速发展和应用领域的不断拓展&…

如何借助Idea创建多模块的SpringBoot项目

目录 1.1、前言1.2、开发环境1.3、项目多模块结构1.4、新建父工程1.5、创建子模块1.6、编辑父工程的pom.xml文件 1.1、前言 springmvc项目&#xff0c;一般会把项目分成多个包:controler、service、dao、utl等&#xff0c;但是随着项目的复杂性提高&#xff0c;想复用其他一个模…

Linux系统-------------mysql主从复制和读写分离

目录 前言 为什么要主从复制&#xff1f; 主从复制谁复制谁&#xff1f; 数据放在什么地方&#xff1f; 一、mysql支持的复制类型 1.1STATEMENT&#xff1a;基于语句的复制 1.2ROW&#xff1a;基于行的复制 1.3MIXED&#xff1a;混合类型的复制 二、主从复制的工作过程 三个重…

LINUX笔记温习

目录 DAY1 DAY2 day3&#xff1a; day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14 day15 20day DAY1 1、多层级文件夹创建要带-p&#xff1b; 2、创建多文件&#xff0c;要先到该目录下才能创建(第一个目录必须存在才能有效建立)&#xff1b; D…

HackTheBox-Mist

整体思路 端口扫描->Pluck CMS组件文件读取漏洞->文件上传获取shell->创建指向exe的快捷方式来提权-> 信息收集&端口利用 namp -sSVC 10.10.11.17目标只开放了80端口&#xff0c;将mist.htb加入到hosts文件后&#xff0c;访问mist.htb Pluck CMS文件读取 在…

SAMBA服务

文章目录 什么是SAMBASAMBA的发展历史与名称的由来SAMBA常见的应用 SAMBA服务器基础配置配置共享资源Windows挂载共享Linux挂载共享 什么是SAMBA 下图来自百度百科 SAMBA的发展历史与名称的由来 Samba是一款开源的文件共享软件&#xff0c;它基于SMB&#xff08;Server Messa…

每天五分钟计算机视觉:如何基于滑动窗口技术完成目标的检测?

汽车检测算法 现在我们想要构建一个汽车检测算法,我们希望输入到算法中一张图片,算法就可以帮助我们检测出这张图片中是否有汽车。 数据集 首先创建一个标签训练集,x是样本,y是标签。我们的训练集最好是被剪切过的图片,剪掉汽车以外的部分,使汽车居于中间位置,就是整张…

GICv3学习

中断分组 GICD_CTLR&#xff1a;配置是否支持group0、安全group1、非安全group1中断&#xff1b; 怎么配置中断在哪个组&#xff1b; 怎么知道中断是安全的还是非安全的&#xff1b; GICD_IGROUPR&#xff1a; 配置中断分组、中断是安全还是非安全&#xff1b; 4.4 软件产生中…

生产制造园区数字孪生3D大屏展示提升运营效益

在智慧园区的建设中&#xff0c;3D可视化管理平台成为必不可少的工具&#xff0c;数字孪生公司深圳华锐视点打造的智慧园区3D可视化综合管理平台&#xff0c;致力于将园区的人口、经济、应急服务等各项业务进行3D数字化、网络化处理&#xff0c;从而实现决策支持的优化和管理的…

LuaJIT源码分析(二)数据类型

LuaJIT源码分析&#xff08;二&#xff09;数据类型 LuaJIT支持的lua数据类型和官方的lua 5.1版本保持一致&#xff0c;它的源文件中也有一个lua.h&#xff1a; // lua.h /* ** basic types */ #define LUA_TNONE (-1)#define LUA_TNIL 0 #define LUA_TBOOLEAN 1 #define L…

产品经理的自我修养

点击下载《产品经理的自我修养》 1. 前言 在产品领域取得成功的关键在于持续的激情。只有保持热情不减,我们才能克服各种困难,打造出卓越的产品。 如果你真心渴望追求产品之路,我强烈建议你立即行动起来,亲自参与实际的产品创作。无论是建立一个网站、创建一个社群,还是…

RTOS中临界区嵌套保护的实现原理(基于RT-Thread)

0 前言 什么是临界区&#xff08;临界段&#xff09;&#xff1f; 裸机编程中由于不涉及线程和线程切换&#xff0c;因此没有临界区这一个概念。在RTOS中由于存在线程切换等场景&#xff0c;便有了临界区这个概念。简单来说&#xff0c;临界区就是不允许被中断的代码区域。什么…

从PDF到高清图片:一步步学习如何转换PDF文件为高清图片

引言 PDF文件是一种便携式文档格式&#xff08;Portable Document Format&#xff09;&#xff0c;最初由Adobe Systems开发&#xff0c;用于在不同操作系统和软件之间保持文档格式的一致性。PDF文件通常包含文本、图片、图形等多种元素&#xff0c;并且可以以高度压缩的方式存…

containerd配置HTTP私仓

文章目录 1. &#x1f6e0;️ 基础环境配置2. &#x1f433; Docker安装3. &#x1f6a2; 部署Harbor&#xff0c;HTTP访问4. &#x1f4e6; 部署ContainerD5. &#x1f504; 修改docker配置文件&#xff0c;向harbor中推入镜像6. 配置containerd6.1. 拉取镜像验证6.2. 推送镜像…