在 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)); // 簡單亂序