C# List Sort 排序用法总结

一、升序、降序

其实C#中的List的Sort函数中的比较函数CompareTo有三种结果 1, -1 ,0分别代表大,小,相等。默认List的排序是升序排序。

举个例子:在比较函数CompareTo()中,如果 x>y return 1;则是按照升序排列。如果x>y return -1;则是按照降序排列。这就是1和-1大小的含义。其实你非要这么写 x<y return 1;则也表示降序排列。不过大家一般习惯x>y return 1;升序,如果想要降序只需return -1;即可。

Tips:系统List默认的排序是升序,如果你想要降序,可以直接在比较函数前面加个负号,把返回结果由1变成-1即可。例如:

List<int> list = new List<int>() { 2, 1, 3, 4 };
list.Sort((x, y) => -x.CompareTo(y));
Console.WriteLine(list); //4,3,2,1

二、对于非数值类型、string等或者官方未来实现IComparable接口的类型,可通过实现IComparable接口重写CompareTo方法来排序。
举个例子:自定义一个类,然后继承字: IComparable<>,然后实现接口的方法 int CompareTo(object obj_)就可以了

 public class Person : IComparable<Person>
    {
        public int id;
        public string name;

        public Person()
        {
            id = 0;
            name = "name";
        }
        public Person(int id_, string name_)
        {
            id = id_;
            name = name_;
        }

        public int CompareTo(Person obj_)
        {
            if (this.id > obj_.id)
                return 1;
            else
                return -1;
        }
    }

三、多权重排序
其实就是对优先级最高的字段进行排序,然后在对次级优先级的字段进行排序就可以了。例如对Persond的对象先进行ID排序,然后再进行Name排序:

public int CompareToIDName(Person x_, Person y_)
        {
            if (x_.id > y_.id)
                return 1;
            else if (x_.id == y_.id)
            {
                return x_.name.CompareTo(y_.name);
            }
            else
                return -1;
        }

四、使用匿名函数来实现Comparison
虽然想实现排序上面的接口代码也不多,但有时候只是偶尔排序,并不想修改类,怎么办呢?当然有更简单的方法,委托和lambda表达式:

public void Init()
        {
            m_personList.Add(new Person(10001, "Zhao"));
            m_personList.Add(new Person(10006, "Qian"));
            m_personList.Add(new Person(10006, "Zhao"));
            m_personList.Add(new Person(10004, "Li"));
            m_personList.Add(new Person(10006, "Zhao"));

            m_personList.Sort();

            m_personList.Sort(delegate (Person x, Person y)
            {
                if (x.id > y.id)
                    return 1;
                else
                    return -1;
            });

            m_personList.Sort((x, y) =>
            {
                return x.name.CompareTo(y.name);
            });

            m_personList.Sort((x, y) => CompareToIDName(x, y));
        }

**List笔记
List赋值到另一个List的方法,进行AddRange。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值