一般我們在撰寫程式時,很常會使用到List<>來裝取自定義的類別陣列,跟一般的陣列插在哪呢?!好處是什麼?!好處就是一般的陣列需要先宣告長度,而List<>不用,所以在資料個數不一的時候我們可能比較會使用List<>來裝載資料,並且依序地呈現給使用者看,所以List<>的排序就變得將當重要了!

 

 

本篇文章將引導您將List<object>排序。

 

以身高為範例,首先我們先自定義一個類別用來放在List<>中用的。

public class TallItem{
    public string name { set; get; }
    public int Height { set; get; }
}

再來將個別的身高資料放入List<>中

public void InitialTallItem() {
    List<TallItem> list_tallItems = new List<TallItem>();
    list_tallItems.Add(new TallItem() { name = "Tony", Height = 180 });
    list_tallItems.Add(new TallItem() { name = "Jorden", Height = 200 });
    list_tallItems.Add(new TallItem() { name = "Nono", Height = 155 });
    list_tallItems.Add(new TallItem() { name = "Jessica", Height = 166 });
}

 

再來是排序

list_tallItems.Sort((x, y) => { return -x.Height.CompareTo(y.Height); });

所以全部大概長這樣:

public void InitialTallItem() {
    List<TallItem> list_tallItems = new List<TallItem>();
    list_tallItems.Add(new TallItem() { name = "Tony", Height = 180 });
    list_tallItems.Add(new TallItem() { name = "Jorden", Height = 200 });
    list_tallItems.Add(new TallItem() { name = "Nono", Height = 155 });
    list_tallItems.Add(new TallItem() { name = "Jessica", Height = 166 });
    
    list_tallItems.Sort((x, y) => { return -x.Height.CompareTo(y.Height); });
    
    for (int i = 0; i < list_tallItems.Count; i++) {
        Debug.WriteLine(list_tallItems[i].name + ":" + list_tallItems[i].Height);
    }
}

 

顯示的結果會是這樣:

 

1:  Jorden:200
2:  Tony:180
3:  Jessica:166
4:  Nono:155

 

如此一來List<TallItem>就經過排序囉,並且是由高到低排序。

 

除此之外也可以使用Linq語法來排序,此方法有點像在下SQL資料庫的語法,也比較淺顯易懂

 

List<TallItem> list_tallItems = new List<TallItem>();
list_tallItems.Add(new TallItem() { name = "Tony", Height = 180 });
list_tallItems.Add(new TallItem() { name = "Jorden", Height = 200 });
list_tallItems.Add(new TallItem() { name = "Nono", Height = 155 });
list_tallItems.Add(new TallItem() { name = "Jessica", Height = 166 });

//依 身高 做遞增排序  
list_tallItems = list_tallItems.OrderBy(x => x.Height).ToList();
foreach (TallItem item in list_tallItems)
{
    Debug.WriteLine(item.name + ":" + item.Height);
}
Debug.WriteLine("================================");
//依 身高 做遞減排序  
list_tallItems = list_tallItems.OrderByDescending(x => x.Height).ToList();
foreach (TallItem item in list_tallItems)
{
    Debug.WriteLine(item.name + ":" + item.Height);
}

 

結果會像這樣:

1:  Nono:155
2:  Jessica:166
3:  Tony:180
4:  Jorden:200
5:  ================================
6:  Jorden:200
7:  Tony:180
8:  Jessica:166
9:  Nono:155

References : [C#] 如何使用 Sort 和「查詢運算式」在 List<T> 中做排序和尋找

 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
http://www.sukitech.com/?p=736
轉載請註明出處,並且附上本篇文章網址 !  感謝。

發表迴響

你的電子郵件位址並不會被公開。

Post Navigation