首頁 » C#開發 » [C#] List.Sort的應用範例

[C#] List.Sort的應用範例

作者:

分類:

C# List<T> 排序

C# List<T>有兩種排序方式,Sort/Reverse vs. OrderBy/OrderByDescending(LINQ),兩種使用方式各有優缺點。

本次介紹第一種Sort/Reverse,相對於LINQ會對列表內容直接排序且不需要重新賦值,通常是用來重新排序一個列表,而不是像LINQ用來遍歷(foreach)集合。

另外如果是自訂類別(class/struct)則需要自行實作比較器(Comparison/IComparer…),使用上就沒有LINQ來的方便。

List.Sort()/Reverse() 用法

如果List是int、string…等內建實值類型,因為C#已經實作了比較器,可以用.Sort().Reverse()來升降冪排序。

List<int> intList = new List<int>() { 0, 2, 1 };
intList.Sort();    //升冪排序 0,1,2
intList.Reverse(); //降冪排序 2,1,0


List<string> strList = new List<string>() { "c", "b", "a" };
strList.Sort();    //升冪排序 a,b,c
strList.Reverse(); //降冪排序 c,b,a

List.Sort(Comparison<T> comparison)

前面的例子因為是內建的實值類型,但當泛型<T>是自定義的類別(class)或結構(struct)時,就需要自己動手來了!

如果只要以其中一項屬性排序,最簡潔的做法是使用Lambda實作委派Comparison<T>,下面有個自訂的類別Item:

class Item
{
    public int Number { get; set; } = 0;
    public string Text { get; set; } = string.Empty;
}

在排序時,可以這樣寫:

不同的地方是降冪要在前面加上負號(-),讓比較器返回的值相反。

List<Item> itemlist = new List<Item>();
itemlist.Sort((x, y) => x.Number.CompareTo(y.Number)); //以Number升冪
itemlist.Sort((x, y) => -x.Number.CompareTo(y.Number)); //以Number降冪

itemlist.Sort((x, y) => x.Text.CompareTo(y.Text)); //以Text升冪
itemlist.Sort((x, y) => -x.Text.CompareTo(y.Text)); //以Text降冪

測試結果正確

List.Sort測試
List.Sort測試

如果需要進一步實作排序的委派,可以參考Comparison<T>

參考資料

「cian」的個人頭像

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *