升序降序比较
sort有三种结果 1,-1,0分别是a大于b,a小于b,a等于b。tips:0值最好跟-1,因为-1不交换,也就是等号跟-1;
such as (a,b)=>{return a-b;}//asc (a,b)=>{return b-a;};//desc a于b即为左右关系
默认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
//Tip: Item2 > Item1
如果单独对升序降序控制,可以去掉大括号,分开处理
原文:https://www.cnblogs.com/hont/p/4375635.html
CompareTo
int value_1 = 1;
int value_2 = 2;
if(value_1.CompareTo(value_2)>0)
{
Console.WriteLine("value_1 大于 value_2");
}
else
{
Console.WriteLine("value_1 小于 value_2");//结果必然是value_1小于value_2
}
//CompareTo方法比较的是 value_1与value_2的值
//若value_1大于value_2 则返回1
//若value_1等于value_2 则返回0
//若value_1小于value_2 则返回-1
原文:https://blog.csdn.net/W1025514023/article/details/49337763
private void test()
{
List<int > arry = new List<int>();
arry.Add(4);
arry.Add(9);
arry.Add(5);
arry.Add(5);
arry.Add(8);
arry.Add(3);
arry.Add(6);
arry.Add(1);
arry.Sort((a, b) => { return a <= b ? -1 : 1; });//升序
arry.Sort((a, b) => a - b });//升序 等同上一行
foreach (var item in arry)
{
Debug.LogWarning(item);
}
}
public struct Student
{
public int age;
public int height;
public Student(int age, int height)
{
this.age = age;
this.height = height;
}
}
static void Test()
{
List<Student> arry = new List<Student>();
arry.Add(new Student(4, 50));
arry.Add(new Student(9, 81));
arry.Add(new Student(5, 55));
arry.Add(new Student(5, 57));
arry.Add(new Student(8, 75));
arry.Add(new Student(3, 45));
arry.Add(new Student(6, 60));
arry.Add(new Student(1, 12));
arry.Sort((a, b) => { return a.height <= b.height ? -1 : 1; });//升序
foreach (var item in arry)
{
Console.WriteLine("---"+item.age+"----"+item.height);
}
}