京东那个做快消的网站,网站备案登记,贤邦网站建设app开发,wordpress调用一周文章1、使用List.Sort()对基本数值类型数据进行排序 案例#xff1a;对存放int数据的List进行排序
其实C#中的List的Sort函数中的比较函数CompareTo有三种结果 1, -1 ,0分别代表大#xff0c;小#xff0c;相等。默认List的排序是升序排序。
举个例子#xff1a;在比较函数Co…1、使用List.Sort()对基本数值类型数据进行排序 案例对存放int数据的List进行排序
其实C#中的List的Sort函数中的比较函数CompareTo有三种结果 1, -1 ,0分别代表大小相等。默认List的排序是升序排序。
举个例子在比较函数CompareTo()中如果 xy return 1;则是按照升序排列。如果xy return -1;则是按照降序排列。这就是1和-1大小的含义。其实你非要这么写 xy return 1;则也表示降序排列。不过大家一般习惯xy return 1;升序如果想要降序只需return -1即可。
Tips系统List默认的排序是升序如果你想要降序可以直接在比较函数前面加个负号把返回结果由1变成-1即可。例如
Listint list new Listint() { 2, 1, 3, 4, 5 };
list.Sort((x, y) -x.CompareTo(y));
for (int i 0; i list.Count(); i)
{Console.Write(list[i] );
}
Console.WriteLine();2、使用List.Sort()对非数值类型、string、结构体、对象等或者官方未实现IComparable接口的类型进行排序 案例 假设我们目前有一个Person类和存放Person类数据的List如下
public class Person
{public int id;public string name;public Person(){id 0;name name;}public Person(int id_, string name_){id id_;name name_;}}static void Main(string[] args)
{ListPerson list2 new ListPerson();list2.Add(new Person(10001, Tom));list2.Add(new Person(10003, Jerry));list2.Add(new Person(10002, Ben));list2.Add(new Person(10005, Cat));list2.Add(new Person(10004, Danny));
}假设我们现在的需求是将这个其按照id从小到大进行排序。 我们有两种办法
方法一实现IComparable接口重写CompareTo方法
代码:
public class Person : IComparablePerson
{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;elsereturn -1;}
}static void Main(string[] args)
{Listint list new Listint() { 2, 1, 3, 4, 5 };list.Sort((x, y) -x.CompareTo(y));for (int i 0; i list.Count(); i){Console.Write(list[i] );}Console.WriteLine();Console.WriteLine();ListPerson list2 new ListPerson();list2.Add(new Person(10001, Tom));list2.Add(new Person(10003, Jerry));list2.Add(new Person(10002, Ben));list2.Add(new Person(10005, Cat));list2.Add(new Person(10004, Danny));// List.Sort自定义对象结构体排序规则的第一种办法在类中实现IComparable接口list2.Sort();for (int i 0; i list2.Count(); i){Console.WriteLine(list2[i].id list2[i].name);}Console.WriteLine();
}方法二编写一个排序规则的函数调用LIst.Sort()时将其传入
代码
public class Person
{public int id;public string name;public Person(){id 0;name name;}public Person(int id_, string name_){id id_;name name_;}
}private static int CmpFun(Person a, Person b)
{if (a.id b.id)return 1;elsereturn -1;
}static void Main(string[] args)
{ListPerson list2 new ListPerson();list2.Add(new Person(10001, Tom));list2.Add(new Person(10003, Jerry));list2.Add(new Person(10002, Ben));list2.Add(new Person(10005, Cat));list2.Add(new Person(10004, Danny));// List.Sort自定义对象结构体排序规则的第二种办法写一个排序的规则函数将其传入list2.Sort(CmpFun);for (int i 0; i list2.Count(); i){Console.WriteLine(list2[i].id list2[i].name);}Console.WriteLine();
}请注意在不带括号的情况下使用方法名称。 将方法用作参数会告知编译器将方法引用转换为可以用作委托调用目标的引用并将该方法作为调用目标进行附加。