很多人可能喜欢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。
而数值类型也可以自己比较。排序时左右两个变量必须是左-比较-右,切记不可反过来比较。
sort方法官方推荐的命名方式是x(左),y(右)。对于复杂的比较可以分出来,单独写成函数
多权重比较
假设需要tuple里item2的值优先于item1。这个时候只要给比较结果*2即可。
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
时间: 2024-10-16 04:49:58