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)); // 简单乱序