using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace L_List_sort { public class Person:IComparable<Person> { // 属性 public string name; public int age; // 构造 public Person( string name, int age) { this .name = name; this .age = age; } // 重写字符串 public override string ToString() { return "name: " + this .name + " age: " + this .age; } // 实现比较接口 public int CompareTo(Person other) { // 根据返回值排序 升序 if ( this .age > other.age) { // 大于0 放后面 return 1; } else { // 小于 0 放前面 return -1; } } } class Program { static void Main( string [] args) { Console.WriteLine( "泛型数组的排序" ); #region 知识一 List自带排序方法 Console.WriteLine( "--------------------List自带排序方法" ); List< int > listInt = new List< int >(); listInt.Add(4); listInt.Add(2); listInt.Add(3); listInt.Add(1); Console.WriteLine( "-------排序前" ); PrintList< int >(listInt); Console.WriteLine( "-------排序后" ); // 排序 listInt.Sort(); PrintList< int >(listInt); #endregion #region 知识二 自定义类的排序 Console.WriteLine( "--------------------自定义类的排序" ); List<Person> listPerson = new List<Person>(); listPerson.Add( new Person( "张三" , 20)); listPerson.Add( new Person( "李四" , 18)); listPerson.Add( new Person( "王五" , 31)); listPerson.Add( new Person( "曹操" , 45)); Console.WriteLine( "-------排序前" ); PrintList<Person>(listPerson); Console.WriteLine( "-------排序后" ); // 继承排序(需要继承 接口 :IComparable<Person>) listPerson.Sort(); PrintList<Person>(listPerson); #endregion #region 知识三 通过委托函数进行排序 Console.WriteLine( "--------------------通过委托函数进行排序" ); listPerson.Clear(); listPerson.Add( new Person( "张三" , 20)); listPerson.Add( new Person( "李四" , 18)); listPerson.Add( new Person( "王五" , 31)); listPerson.Add( new Person( "曹操" , 45)); Console.WriteLine( "-------排序前" ); PrintList<Person>(listPerson); // 使用委托==>函数排序 listPerson.Sort(SortPerson); Console.WriteLine( "-------排序后" ); PrintList<Person>(listPerson); // Lambda 再次排序 listPerson.Sort((leftP, rightP) => { return leftP.age > rightP.age ? 1 : -1; }); Console.WriteLine( "-------Lambda 再次排序后" ); PrintList<Person>(listPerson); #endregion Console.ReadLine(); } // 排序函数 private static int SortPerson(Person leftP, Person rightP) { // 根据返回值排序 升序 if (leftP.age > rightP.age) { // 大于0 放后面 return -1; } else { // 小于 0 放前面 return 1; } } // 打印列表中元素的内容 private static void PrintList<T>(List<T> nList) { if (nList.Count == 0) Console.WriteLine( "--列表为空数据" ); for ( int i = 0; i < nList.Count; i++) { Console.WriteLine(nList[i].ToString()); } } } } |