很多人可能喜歡Linq的orderBy排序,可惜U3D裡面linq在Ios上會報錯,所以就必須使用list的排序。
其實理解了並不難
升序降序比較
sort有三種結果 1,-1,0分別是大,小,相等。
默認List的排序是升序排序
如果要降序排序,也很簡單,只需要在前面加一個負號
List<int> tmp = new List<int>(){5,1,22,11,4}; tmp.Sort((x, y) => -x.CompareTo(y)); Console.WriteLine(tmp); //22,11,5,4,1
對於非數值類型比較用.CompareTo(...),基於IComparable接口。基本上C#的值類型都有實現這個接口,包括string。
而數值類型也可以自己比較。排序時左右兩個變量必須是左-比較-右(被比較),切記不可反過來用。
微軟官方推薦的參數命名方式是x(左),y(右)
多權重比較
假設需要tuple裡item2的值優先於item1。這個時候只要給比較結果*X。
List<Tuple<int, int>> tmp = new List<Tuple<int, int>>() { new Tuple<int,int>(2,1), new Tuple<int,int>(53,1), new Tuple<int,int>(12,1), new Tuple<int,int>(22,3), new Tuple<int,int>(1,2), }; tmp.Sort((x, y) => -(x.Item1.CompareTo(y.Item1) + x.Item2.CompareTo(y.Item2) * 2)); Console.WriteLine(tmp); //22,3 //1,2 //53,1 //12,1 //2,1
如果單獨對升序降序控制,可以去掉大括號,分開處理