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

  • 58099
  • 0
  • C#
  • 2012-10-30

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

還記得我一開始用 List<T> 型別的時候

 

是要做一個簡單的學生成績程式

 

其中會將「Student」類別都加到 List<Student> 裡頭

 

簡單的程式碼如下:

 

 

image

 

 


 

Sort

 

如果我們需要對這 10 個學生,按照成績做排序呢?

 

以前不懂的我,馬上搬出「Quick Sort」快速排序法(也許還有氣泡排序、選擇排序…等等)

 

但是現在

 

你可以透過下列方式:

 

 

就這麼簡單

 

先來說明一下:

 

在 List<T> 中提供了 Sort 函式,讓你可以按照想要的排序條件做排序

 

在 MSDN 官網中有提到

 

其實它是用「快速排序法」(Quick Sort) 去實作的

 

其中上述的程式碼是透過「Lambda」表述式來完成「比較」的動作

 

「x」和「y」分別為想取的兩個數

 

而這兩個變數的型別會自動抓到是「Student」

 

所以可以取得 Public 變數 Score 來做比較

 

最後會傳回 1、0 或 –1

 

代表的意思分別為:x > y, x == y, x < y。

 

所以如果要將分數是由高到底排序,則在 return 的地方加個「負號」即可。

 

 

值得一提的是

 

如果你的 List 集合是很單純的值

 

例如:List<int>

 

那當你要排序的時候

 

只要直接呼叫 Sort 就會幫你做排序的動作了

 

 


取得

 

現在有了排序

 

我們還想將成績不及格的同學抓出來

 

最簡單的方法就是透過迴圈

 

比對分數,低於 60 分的都 Get 出來

 

 

不過這邊要講的是另一個方法

 

透過「查詢運算式」可以利用像是「資料庫搜尋」的程式碼

 

將想取得的值抓出,並建立一個 List 集合

 

 

取得後回傳的 query 變數

也能透過 foreach 將分數印出

當然也是可以再做一次排序


完整程式碼