list 是我們常用到的數據類型,我們常常會用list去處理很多的數據。我們也常常會有這樣的一個操作,就是排序sort
list 所在的命名空間是System.Collections.Generic
排序的方式
一 對於基本的數據類型,本身又icompare的繼承的我們可以直接使用list.sort();進行升序排列。不需要做任何操作
如 我們定義
List<int> testList = new List<int>();
testList.Add(2);
testList.Add(1);
testList.Add(3);
testList.Add(4);
testList.Add(5);
testList.Add(0);
直接使用testList.sort();就能得到 012345的序列
二 自己定義比較方法,這是我比較常用的,可以對多個條件進行比較,很容易進行擴展
private int SortList(int a,int b) //a b表示列表中的元素
{
if(a > b) //這邊的比較可以是任意的類型,只要是你可以比較的東西,比如student類中的年齡age stu1.age > stu2.age
{
return 1;
}
else if (a < b)
{
return -1;
}
return 0;
}
最后我們調用的時候testList.sort(SortList);
三 當比較的排序項比較少甚至是一個的時候我們可以直接不寫出函數然后直接使用,如下
testList.sort((int a,int b) => { return a>b ? 1 : -1;}); 其中 =>是一種匿名委托。跟定義delegate寫的方式一樣,也和第二種是類似的。
最近使用的時候發現這種寫法只返回1 和-1 是存在問題的。
http://blog.csdn.net/qq276592716/article/details/7932483 這里貼上c++ stl中sort的排序算法增加理解
他不一定會給你排出你想要的順序,因為他的內部會分多集合去相互比較,還是回出現return 0的結果
testList.sort((int a,int b) => { 這里還是用if來把3中結果都判定出來})。
四 使用OrderBY/OrderByDescending選擇的方式做升/降序排列
testList = testList.OrderBy(u=>u).ToList(); //其中u也是隱藏寫法,因為我們沒有需要調用的,直接用自己比較就直接這樣比較久可以了。
如果里面的項是一個class。比如上面說的Student類,那么我們可以這樣
testList = testList.OrderBy(u=>u.age).ToList(); //這樣我們也把他進行了一次排序
基本上就是使用這幾種方式就可以完整的做好排序工作。
但願前面看到的朋友沒有被誤導,如果有表示抱歉,現已經更正.