c#sort升序还是降序_C# List Sort 排序用法总结

周末在家闲着没事,就找个知识点给自己的C#之旅专栏写点文章,填充一下。

一、升序、降序

其实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));

}

by 2020-05-17 周日 晚上


版权声明:本文为weixin_39900676原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。