C# 排序:Sort 與 OrderBy
在 C# 中,我們有多種對集合進行排序的選項,包括 Sort 和 OrderBy。本文將深入探討這兩種方法及其各自演算法之間的差異。
排序
Sort 方法使用 QuickSort 演算法執行就地排序。這是一種不穩定的排序演算法,意味著排序後可能無法保留相等元素的順序。
OrderBy
OrderBy 方法則執行穩定排序。這意味著相等的元素在排序後保持其相對順序。 OrderBy 內部使用了歸併排序演算法。
效能對比
Sort 和 OrderBy 的表現因集合大小、元素類型等因素而異,以及排序標準。一般來說,對於小型集合或按原始資料類型排序時,排序速度更快。然而,對於較大的集合或複雜的排序條件,OrderBy 因其穩定的排序演算法可以更有效率。
使用場景
排序適合需要執行的情況就地排序,不需要保留相等元素的順序。當保留相等元素的順序很重要或當您需要在排序後執行其他操作(例如過濾或投影)時,OrderBy 是更好的選擇。
範例
考慮下面的範例:
List<Person> persons = new List<Person>(); persons.Add(new Person("P005", "Janson")); persons.Add(new Person("P002", "Aravind")); persons.Add(new Person("P007", "Kazhal"));
使用Sort,我們可以對清單進行排序name:
persons.Sort((p1, p2) => string.Compare(p1.Name, p2.Name, true));
使用OrderBy,我們可以使用自訂比較器執行穩定排序:
var query = persons.OrderBy(n => n.Name, new NameComparer()); class NameComparer : IComparer<string> { public int Compare(string x, string y) { return string.Compare(x, y, true); } }
在這個例子中,OrderBy 更合適,因為它確保相等的順序名稱被保留。
以上是C# 排序:排序與 OrderBy:我什麼時候該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!