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