首页 > 编程语言 > 详细

List.sort非数值类型排序

时间:2015-03-29 14:54:39      阅读:400      评论:0      收藏:0      [点我收藏+]

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

 

List.sort非数值类型排序

原文:http://www.cnblogs.com/hont/p/4375635.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!