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

C#中对于List的多种排序方式

在 C# 中给 List<AI> 排序,只要 明确排序规则(比如按某个字段、某几个字段、或外部规则),就能用下面几种常见写法。下面全部基于这个示例类:

public class AI
{public int  country;   // 国家编号public int  priority;  // 额外权重public float hp;       // 血量
}

 1. 单字段排序(最常用)

// 升序
aiList.Sort((a, b) => a.country.CompareTo(b.country));// 降序
aiList.Sort((a, b) => b.country.CompareTo(a.country));// 或者 LINQ(返回新列表,原列表顺序不变)
var ordered = aiList.OrderBy(ai => ai.country).ToList();        // 升
var ordered = aiList.OrderByDescending(ai => ai.country).ToList(); // 降

2. 多字段排序(先按 country,再按 priority)

// 方法 A:Sort + 元组
aiList.Sort((a, b) =>
{int r = a.country.CompareTo(b.country);return r != 0 ? r : a.priority.CompareTo(b.priority);
});// 方法 B:LINQ 链式
var ordered = aiList.OrderBy(ai => ai.country).ThenByDescending(ai => ai.priority) // 第二个字段可升/降.ToList();

3. 实现 IComparable<AI>(类内自带规则)

public class AI : IComparable<AI>
{public int country;public int priority;public int CompareTo(AI other){int r = country.CompareTo(other.country);return r != 0 ? r : priority.CompareTo(other.priority);}
}// 使用
aiList.Sort();   // 直接按 CompareTo 规则排序

 4. 自定义排序器(IComparer<AI>

当规则需要外部注入动态变化时使用:

public class CountryPriorityComparer : IComparer<AI>
{public int Compare(AI x, AI y){int r = x.country.CompareTo(y.country);return r != 0 ? r : x.priority.CompareTo(y.priority);}
}aiList.Sort(new CountryPriorityComparer());

 5,随机/乱序排序(额外补充)

System.Random rng = new System.Random();
aiList.Sort((_, __) => rng.Next(-1, 2));   // 简单乱序

http://www.dtcms.com/a/311987.html

相关文章:

  • LeeCode 88. 合并两个有序数组
  • DeepSpeed - 超大LLM分布式训练框架 ZeRO技术
  • Python day32
  • 力扣 二叉树遍历 中序/前序/后序(递归和迭代版)
  • dbt中多源数据的处理
  • 混合嵌入与置信度增强:新一代RAG技术如何提升LLM性能
  • 1.6 vue 监听
  • JavaScript 原始值与引用值
  • SQL语言学习(group by,having)
  • PyTorch 中 Tensor 统计学函数及相关概念
  • 基于单片机一氧化碳CO检测/煤气防中毒检测报警系统
  • OneCode 3.0智能分页拦截器深度解析:从拦截机制到性能优化
  • 轨道追逃博弈仿真
  • 输电线路建模与电力负荷特性详解(含等值模型与曲线分析)
  • Vue 详情模块 4
  • SQL语言学习(JOIN)
  • Orange的运维学习日记--25.Linux文件系统基本管理
  • 使用xshell连接远程腾讯云服务器,报错:Xshell Socket error Event: 32 Error: 10053
  • 智能图书馆管理系统开发实战系列(五):前后端集成 - koffi调用与接口设计
  • 用resmon搜索某文件被未知程序占用而无法删除
  • 第15届蓝桥杯Python青少组_省赛_中/高级组2024年8月真题
  • Java,八股,cv,算法——双非研0四修之路day23
  • SpringBoot 信用卡检测、OpenAI gym、OCR结合、DICOM图形处理、知识图谱、农业害虫识别实战
  • 博客|基于Springboot的个人博客系统设计与实现(源码+数据库+文档)
  • 占道经营识别漏检率↓76%:陌讯动态场景适配算法实战解析
  • 区分「尊重」和「顺从」
  • FastAPI入门:响应模型
  • 如何分析Linux内存性能问题
  • Windows字体simsum.ttf的安装与Python路径设置指南
  • junit中@InjectMocks作用详解