C# List Sort 排序用法总结

一、升序、降序

其实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即可。例如:

Listlist=newList(){2,1,3,4};list.Sort((x,y)=> {return -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));

        }


该文章同时发布于知乎:C# List Sort 排序用法总结 - 知乎

你可能感兴趣的:(C# List Sort 排序用法总结)