C#List排序sort

升序降序比较

在这里插入图片描述

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);
        }
    }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值