首页 > 学院 > 开发设计 > 正文

C# List.sort排序详解(多权重,升序降序)

2019-11-17 02:29:11
字体:
来源:转载
供稿:网友

C# List.sort排序详解(多权重,升序降序)

很多人可能喜欢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

如果单独对升序降序控制,可以去掉大括号,分开处理


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表