当前位置: 首页 > news >正文

C# 数组/集合排序

一:基础类型集合排序

/// <summary>
/// 排序
/// </summary>
/// <param name="isReverse">顺序是否取反</param>
public static void Sort<T>(this IList<T> array, bool isReverse = false)where T : IComparable
{var count = array.Count;for (int i = 0; i < count; i++){for (int j = 0; j < count; j++){var k = j + 1;if (k >= count)break;if (!isReverse){if (array[j].CompareTo(array[k]) == 1)(array[j], array[k]) = (array[k], array[j]);}else{if (array[j].CompareTo(array[k]) == -1)(array[j], array[k]) = (array[k], array[j]);}}}
}

测试:

if (Input.GetKeyDown(KeyCode.Space))
{// 字符串数组var strArray = new[] {"8", "1", "J", "D","A", "B1"};strArray.Sort(true);string str0 = "";for (int i = 0; i < strArray.Length; i++){str0 += strArray[i] + ((i + 1 < strArray.Length) ? "、" : "");}Debug.LogError(str0);// int数组var intArray = new[] {8, 1, 10, 5, 9, 7};intArray.Sort();string str1 = "";for (int i = 0; i < intArray.Length; i++){str1 += intArray[i] + ((i + 1 < intArray.Length) ? "、" : "");}Debug.LogError(str1);
}

在这里插入图片描述

二:排序扩展(根据某个类型排序)

[System.Runtime.InteropServices.ComVisible(true)]
public interface IComparableByEnum : IComparable
{int CompareTo(Enum sortEnum, object compareObj);
}/// <summary>
/// 排序
/// </summary>
/// <param name="sortEnum">依据什么类型排序</param>
/// <param name="isReverse">顺序是否取反</param>
public static void Sort<T>(this IList<T> array, Enum sortEnum, bool isReverse = false)where T : IComparableByEnum
{var count = array.Count;for (int i = 0; i < count; i++){for (int j = 0; j < count; j++){var k = j + 1;if (k >= count)break;if (!isReverse){if (array[j].CompareTo(sortEnum, array[k]) == 1)(array[j], array[k]) = (array[k], array[j]);}else{if (array[j].CompareTo(sortEnum, array[k]) == -1)(array[j], array[k]) = (array[k], array[j]);}}}
}
public enum SortType
{Id,Name,
}public class MyClass : IComparableByEnum
{public int id;public string name;public MyClass(int _id, string _name){id = _id;name = _name;}public int CompareTo(object obj){return CompareTo(MySortType.Id, obj);}public int CompareTo(Enum sortEnum, object compareObj){if (!(sortEnum is SortType sortType))return -1;if (!(compareObj is MyClass value))throw new ArgumentException($"参数不是{nameof(MyClass)}类型");return sortType switch{SortType.Id => id.CompareTo(value.id),SortType.Name => string.Compare(name, value.name, StringComparison.CurrentCulture),_ => throw new ArgumentException($"排序类型出错{sortType}")};}
}

测试:

private void Update()
{if (Input.GetKeyDown(KeyCode.Space)){var list = new List<MyClass>(){new MyClass(5,"Zz"),new MyClass(86,"C"),new MyClass(1,"Aa"),new MyClass(0,"Bb"),new MyClass(20,"Tt"),};list.Sort(SortType.Id);string str0 = "";for (int i = 0; i < list.Count; i++){str0 += $"{list[i].id};{list[i].name}" + (i + 1 < list.Count? "、" : "");}Debug.LogError(str0);list.Sort(SortType.Name);string str1 = "";for (int i = 0; i < list.Count; i++){str1 += $"{list[i].name};{list[i].id}" + (i + 1 < list.Count? "、" : "");}Debug.LogError(str1);}
}

在这里插入图片描述

相关文章:

C# 数组/集合排序

一&#xff1a;基础类型集合排序 /// <summary> /// 排序 /// </summary> /// <param name"isReverse">顺序是否取反</param> public static void Sort<T>(this IList<T> array, bool isReverse false)where T : IComparable …...

HDRnet

local feature and global feature 在这里插入图片描述 Local features and Global features in Image Local feature also known as local descriptors, are distinct, informative characteristics of an image or video frame that are used in computer vision and image…...

【ArcGISPro】3.1.5下载和安装教程

下载教程 arcgis下载地址&#xff1a;Трекер (rutracker.net) 点击磁力链下载弹出对应的软件进行下载 ArcGISPro3.1新特性 ArcGIS Pro 3.1是ArcGIS Pro的最新版本&#xff0c;它引入了一些新的特性和功能&#xff0c;以提高用户的工作效率和数据分析能力。以下是ArcGIS…...

理解多线程看这一篇就够了

一、基本概念与关系 程序 程序是含有指令和数据的文件&#xff0c;静态地存储在磁盘等存储设备上。它是软件的实体&#xff0c;但未被激活。 进程 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位。当程序被操作系统加载并执行时&#xff0c;就成为一个进程&a…...

解释“this”的工作原理,原型继承如何工作,以及如何实现手写JS继承。还包括Array对象自带的方法列举,以及如何使用闭包。

1:"this"的工作原理: this 关键字指向当前执行上下文的对象,也就是当前函数被调用时所在的对象。this 的值取决于函数的调用方式,不同的调用方式会导致 this 指向不同的对象:作为对象的方法调用,this 指向该对象作为普通函数调用,this 指向全局对象(浏览器中是 wind…...

汇智知了堂实力展示:四川农业大学Python爬虫实训圆满结束

近日&#xff0c;汇智知了堂在四川农业大学举办的为期五天的校内综合项目实训活动已圆满结束。本次实训聚焦Python爬虫技术&#xff0c;旨在提升学生的编程能力和数据分析能力&#xff0c;为学生未来的职业发展打下坚实的基础。 作为一家在IT教育行业享有盛誉的机构&#xff…...

2024下半年软考报名人数较去年减少,仅52.77万

2024下半年软考报名人数 2024年上半年软考考试共计报考52.77万人&#xff0c;其中&#xff0c;初级资格5.12万人、中级资格24.37万人、高级资格23.28万人。 根据往年报名人数&#xff0c;本次考试人数是减少了的&#xff0c;原因分析如下&#xff1a; 1、原来报名热门专业系…...

【前端常见面试题整理】

开放性的题目 自我介绍 突出学习能力 我想换工作的主要原因是 介绍项目 平时是如何学习前端开发的 主要就是两个途径&#xff0c;一个是查阅官方文档&#xff0c;然后就是在网上查找技术资料或者视频去学习。平时没事的时候也会看看github&#xff0c;同时关注一些社区和IT网…...

Java final关键字

可以修饰类、属性、方法和局部变量。 何时使用&#xff1a; 1、不希望某个类被继承&#xff0c;用final修饰该类。 2、不希望父类的某个方法被子类覆盖/重写&#xff0c;用final修饰该方法。 3、不希望类的某个属性的值被修改&#xff0c;用final修饰该属性。 4、不希望某…...

半个月获邀请函|在读博士公派新加坡南洋理工大学联合培养

J同学计划先申报CSC联培博士&#xff0c;如若获批&#xff0c;再走本校的联培资助项目。我们仅用半个月时间&#xff0c;就为其申请到新加坡南洋理工大学&#xff0c;因导师接收名额有限制&#xff0c;其又热心推荐了另一位指导导师&#xff0c;最终J同学如愿获得学校资助出国联…...

c++移动构造和赋值的样例

#include <iostream>class MyResource { public:// 默认构造函数MyResource(size_t size 0) : m_size(size), m_data(size ? new int[size] : nullptr) {std::cout << "Default constructor called\n";}// 析构函数~MyResource() {delete[] m_data;std…...

静态测试---基于WorkList的活跃变量分析

本文主要用于记录在活跃变量分析实验中的报错及解决&#xff0c;涉及静态测试的详细原理内容较少&#xff0c;编译运行底层逻辑偏多。 一、实验要求 1&#xff09;使用llvm基于框架实现一个基于WorkList的活跃变量分析demo。变量在某个程序点有两种状态&#xff0c;live 或 dea…...

Oracle 证书的重要性

随着信息技术的飞速发展&#xff0c;数据库管理已成为企业运营中不可或缺的一部分。Oracle作为全球领先的数据库管理系统提供商&#xff0c;其Oracle Certified Professional&#xff08;OCP&#xff09;认证已成为数据库管理员和开发人员追求的专业认证之一。本文将深入探讨Or…...

【Go专家编程——并发控制——Mutex】

1.Mutex 互斥锁是并发程序中对共享资源进行访问控制的主要手段&#xff0c;对此Go语言提供了Mutex&#xff0c;对外暴露Lock()和Unlock两个方法&#xff0c;分别用于加锁和解锁。 1.1 Mutex的数据结构 源码如下&#xff1a; type Mutex struct{state int32//代表互斥锁的状…...

SRE视角下的DevOps构建之道

引言&#xff1a; 随着数字化时代的飞速发展&#xff0c;软件成为了企业竞争力的核心。为了更高效地交付高质量的软件&#xff0c;DevOps&#xff08;Development和Operations的组合&#xff09;作为一种文化、实践和工具集的集合&#xff0c;逐渐成为了行业内的热门话题。然而…...

小白如何如何理解滑动窗口最大值问题python

文章目录 题目描述思路什么时候弹出元素什么时候加入元素 代码示例和解释 题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 举例&#xff1a; 输…...

Linux--进程间通信(2)(有名管道)

目录 1.原理 2.创建命名管道 3.使用命名通道实现简单的通信 4.使用创建的命名管道 1.原理 匿名管道没有名称&#xff0c;它们是通过句柄在父进程和子进程之间传递的。这意味着匿名管道只能用于具有父子关系的进程之间。 但如果程序之间没关系&#xff0c;那么这时候就要用…...

window自动启动bat文件

开机自动开启远程桌面&#xff0c; WinR 执行netplwiz 命令进入设置&#xff1b;取消勾选&#xff0c;可选择所需用户&#xff0c;点击应用&#xff0c;输入远程的密码即可 开机自动开启远程桌面&#xff0c; WinR 执行netplwiz 命令进入设置&#xff1b;取消勾选&#xff0…...

2024年蓝桥杯Web开发【大赛大纲】15届

一、 组别 Web应用开发分为&#xff1a;大学组和职业院校组。 每位选手只能申请参加其中一个组别的竞赛。各个组别单独评奖。 研究生和本科生只能报大学组。 其它高职高专院校可自行选择报任意组别。 二. 竞赛赛程 省赛时长&#xff1a;4小时。 决赛时长&#xff1a;4小…...

【vue-cli搭建vue项目的过程2.x】

vue-cli搭建vue项目 vue-cli搭建vue项目安装node安装vue-cli脚手架并创建项目安装 Ant Design Vue或element-ui(笔者使用Ant-design-vue组件&#xff0c;并全局引入)开发安装三方库包1、Package.json文件---引入如下package.json文件执行npm i或npm install命令即可下载如下依赖…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...