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# 数组/集合排序
一:基础类型集合排序 /// <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下载地址:Трекер (rutracker.net) 点击磁力链下载弹出对应的软件进行下载 ArcGISPro3.1新特性 ArcGIS Pro 3.1是ArcGIS Pro的最新版本,它引入了一些新的特性和功能,以提高用户的工作效率和数据分析能力。以下是ArcGIS…...
理解多线程看这一篇就够了
一、基本概念与关系 程序 程序是含有指令和数据的文件,静态地存储在磁盘等存储设备上。它是软件的实体,但未被激活。 进程 进程是程序的一次执行过程,是系统运行程序的基本单位。当程序被操作系统加载并执行时,就成为一个进程&a…...
解释“this”的工作原理,原型继承如何工作,以及如何实现手写JS继承。还包括Array对象自带的方法列举,以及如何使用闭包。
1:"this"的工作原理: this 关键字指向当前执行上下文的对象,也就是当前函数被调用时所在的对象。this 的值取决于函数的调用方式,不同的调用方式会导致 this 指向不同的对象:作为对象的方法调用,this 指向该对象作为普通函数调用,this 指向全局对象(浏览器中是 wind…...
汇智知了堂实力展示:四川农业大学Python爬虫实训圆满结束
近日,汇智知了堂在四川农业大学举办的为期五天的校内综合项目实训活动已圆满结束。本次实训聚焦Python爬虫技术,旨在提升学生的编程能力和数据分析能力,为学生未来的职业发展打下坚实的基础。 作为一家在IT教育行业享有盛誉的机构ÿ…...
2024下半年软考报名人数较去年减少,仅52.77万
2024下半年软考报名人数 2024年上半年软考考试共计报考52.77万人,其中,初级资格5.12万人、中级资格24.37万人、高级资格23.28万人。 根据往年报名人数,本次考试人数是减少了的,原因分析如下: 1、原来报名热门专业系…...
【前端常见面试题整理】
开放性的题目 自我介绍 突出学习能力 我想换工作的主要原因是 介绍项目 平时是如何学习前端开发的 主要就是两个途径,一个是查阅官方文档,然后就是在网上查找技术资料或者视频去学习。平时没事的时候也会看看github,同时关注一些社区和IT网…...
Java final关键字
可以修饰类、属性、方法和局部变量。 何时使用: 1、不希望某个类被继承,用final修饰该类。 2、不希望父类的某个方法被子类覆盖/重写,用final修饰该方法。 3、不希望类的某个属性的值被修改,用final修饰该属性。 4、不希望某…...
半个月获邀请函|在读博士公派新加坡南洋理工大学联合培养
J同学计划先申报CSC联培博士,如若获批,再走本校的联培资助项目。我们仅用半个月时间,就为其申请到新加坡南洋理工大学,因导师接收名额有限制,其又热心推荐了另一位指导导师,最终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的活跃变量分析
本文主要用于记录在活跃变量分析实验中的报错及解决,涉及静态测试的详细原理内容较少,编译运行底层逻辑偏多。 一、实验要求 1)使用llvm基于框架实现一个基于WorkList的活跃变量分析demo。变量在某个程序点有两种状态,live 或 dea…...
Oracle 证书的重要性
随着信息技术的飞速发展,数据库管理已成为企业运营中不可或缺的一部分。Oracle作为全球领先的数据库管理系统提供商,其Oracle Certified Professional(OCP)认证已成为数据库管理员和开发人员追求的专业认证之一。本文将深入探讨Or…...
【Go专家编程——并发控制——Mutex】
1.Mutex 互斥锁是并发程序中对共享资源进行访问控制的主要手段,对此Go语言提供了Mutex,对外暴露Lock()和Unlock两个方法,分别用于加锁和解锁。 1.1 Mutex的数据结构 源码如下: type Mutex struct{state int32//代表互斥锁的状…...
SRE视角下的DevOps构建之道
引言: 随着数字化时代的飞速发展,软件成为了企业竞争力的核心。为了更高效地交付高质量的软件,DevOps(Development和Operations的组合)作为一种文化、实践和工具集的集合,逐渐成为了行业内的热门话题。然而…...
小白如何如何理解滑动窗口最大值问题python
文章目录 题目描述思路什么时候弹出元素什么时候加入元素 代码示例和解释 题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 举例: 输…...
Linux--进程间通信(2)(有名管道)
目录 1.原理 2.创建命名管道 3.使用命名通道实现简单的通信 4.使用创建的命名管道 1.原理 匿名管道没有名称,它们是通过句柄在父进程和子进程之间传递的。这意味着匿名管道只能用于具有父子关系的进程之间。 但如果程序之间没关系,那么这时候就要用…...
window自动启动bat文件
开机自动开启远程桌面, WinR 执行netplwiz 命令进入设置;取消勾选,可选择所需用户,点击应用,输入远程的密码即可 开机自动开启远程桌面, WinR 执行netplwiz 命令进入设置;取消勾选࿰…...
2024年蓝桥杯Web开发【大赛大纲】15届
一、 组别 Web应用开发分为:大学组和职业院校组。 每位选手只能申请参加其中一个组别的竞赛。各个组别单独评奖。 研究生和本科生只能报大学组。 其它高职高专院校可自行选择报任意组别。 二. 竞赛赛程 省赛时长:4小时。 决赛时长:4小…...
【vue-cli搭建vue项目的过程2.x】
vue-cli搭建vue项目 vue-cli搭建vue项目安装node安装vue-cli脚手架并创建项目安装 Ant Design Vue或element-ui(笔者使用Ant-design-vue组件,并全局引入)开发安装三方库包1、Package.json文件---引入如下package.json文件执行npm i或npm install命令即可下载如下依赖…...
VisionPro —— CogImageFileTool图像文件管理实战解析
1. CogImageFileTool核心功能解析 第一次接触CogImageFileTool时,我完全被它强大的图像管理能力震撼到了。这个工具就像工业视觉领域的"智能文件管家",专门处理图像文件的读写和存储问题。想象一下,你每天要处理上千张生产线上的产…...
ESP8266天气时钟DIY全攻略:从零搭建到个性化定制
1. 硬件准备与成本控制 作为一个玩了多年智能硬件的爱好者,我强烈推荐从ESP8266开始入门物联网项目。这款芯片的价格实在太香了,9块钱就能买到NodeMCU开发板,性能却足够应付大多数DIY场景。我去年做过统计,用ESP8266搭建的天气时钟…...
PyTorch 2.8深度学习镜像入门必看:RTX 4090D环境验证与快速上手步骤
PyTorch 2.8深度学习镜像入门必看:RTX 4090D环境验证与快速上手步骤 1. 镜像概述与核心优势 PyTorch 2.8深度学习镜像专为RTX 4090D显卡优化设计,提供开箱即用的深度学习开发环境。这个镜像最显著的特点是免去了复杂的环境配置过程,让开发者…...
实战应用:基于快马平台开发完整权限监控应用,保障用户隐私
今天想和大家分享一个非常实用的安卓应用开发实战项目——相册权限监控工具。这个项目的灵感来源于日常生活中大家对隐私保护的关注,特别是最近关于某些应用可能滥用相册权限的讨论。通过InsCode(快马)平台,我们可以快速实现一个完整的解决方案。 项目背…...
XiaoMusic:让小爱音箱突破音乐限制的开源解决方案
XiaoMusic:让小爱音箱突破音乐限制的开源解决方案 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 你是否遇到过这样的困扰:想听的歌曲在各大…...
SlimSAS连接器在高密度存储系统中的关键应用与优化策略
1. SlimSAS连接器为何成为高密度存储的"黄金搭档"? 第一次接触SlimSAS连接器是在去年部署全闪存阵列时。当时机柜里密密麻麻的线缆让我头疼不已,直到工程师拿出这个火柴盒大小的连接器,我才意识到高密度布线的革命真的来了。SlimS…...
RK3568 Serdes方案调试:基于THCV244的I2C透传与MIPI CSI链路配置
1. RK3568与THCV244 Serdes方案概述 在车载摄像头和工业视觉应用中,Serdes(串行器/解串器)技术正变得越来越重要。RK3568作为一款高性能处理器,配合THCV244 Serdes芯片,能够实现远距离传感器数据的稳定传输。这套方案的…...
Honey Select 2终极增强补丁:3分钟快速配置完整模组生态
Honey Select 2终极增强补丁:3分钟快速配置完整模组生态 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾为《Honey Select 2》的模组安装繁…...
告别“傻跟车”:聊聊PLUTO如何用对比学习让自动驾驶学会“思考”与“决策”
告别“傻跟车”:PLUTO如何用对比学习重塑自动驾驶决策逻辑 清晨的都市高架上,一辆银色轿车正以恒定车距跟随前车匀速行驶。当领头车辆突然急刹时,这辆搭载最新PLUTO系统的自动驾驶汽车并未机械复制前车动作,而是同步检测到百米外转…...
Phi-3-mini-4k-instruct-gguf一键部署:VMware虚拟机Ubuntu系统安装全流程
Phi-3-mini-4k-instruct-gguf一键部署:VMware虚拟机Ubuntu系统安装全流程 1. 准备工作与环境搭建 在开始之前,我们需要准备好必要的软件和资源。这个教程适合那些习惯在虚拟化环境中工作的开发者,特别是需要在本地测试后再部署到生产环境的…...
