一般我們在撰寫程式時,很常會使用到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
轉載請註明出處,並且附上本篇文章網址 !  感謝。

One Thought on “[筆記]C# 開發,將List<object>排序。

  1. Helⅼo mates, how is the whole thіng, and
    what yoᥙ want to say on the topic of this artіcle, in my view іtѕ actually amazing in support ߋf me.

發表迴響

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

Post Navigation