您当前的位置: 首页 >  ar

Peter_Gao_

暂无认证

  • 0浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

List的Sort 函数CompareTo升序降序排序

Peter_Gao_ 发布时间:2021-08-21 16:08:15 ,浏览量:0

一、升序、降序

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

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

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

List list = new List() { 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
    {
        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。

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.0473s