很多人可能喜歡Linq的orderBy排序,可惜U3D里面linq在Ios上會報錯,所以就必須使用list的排序。
其實理解了并不難
升序降序比較
sort有三種結(jié)果 1,-1,0分別是大,小,相等。
默認(rèn)List的排序是升序排序
如果要降序排序,也很簡單,只需要在前面加一個負(fù)號
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對于非數(shù)值類型比較用.CompareTo(...),基于IComparable接口。基本上C#的值類型都有實現(xiàn)這個接口,包括string。
而數(shù)值類型也可以自己比較。排序時左右兩個變量必須是左-比較-右(被比較),切記不可反過來用。
微軟官方推薦的參數(shù)命名方式是x(左),y(右)
多權(quán)重比較
假設(shè)需要tuple里item2的值優(yōu)先于item1。這個時候只要給比較結(jié)果*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如果單獨對升序降序控制,可以去掉大括號,分開處理
新聞熱點
疑難解答