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

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

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

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

cs 复制代码
// 升序
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)

cs 复制代码
// 方法 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>(类内自带规则)

cs 复制代码
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>

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

cs 复制代码
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,随机/乱序排序(额外补充)

cs 复制代码
System.Random rng = new System.Random();
aiList.Sort((_, __) => rng.Next(-1, 2));   // 简单乱序
相关推荐
isyangli_blog6 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008116 小时前
FastAPI APIRouter
开发语言·python
Benszen6 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆6 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木6 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
杨充7 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~7 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6167 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
春生野草7 小时前
反射、Tomcat执行
java·开发语言
雪的季节8 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt