C#集合排序


1.對基礎類型進行排序
調用Sort()方法,如果需要降序
 1 List<int> intList = new List<int>() { 1, 2, 3 };
 2             intList.Sort();
 3             foreach (int number in intList)
 4             {
 5                 Console.WriteLine(number);
 6             }
 7             intList.Reverse();
 8             foreach (int number in intList)
 9             {
10                 Console.WriteLine(number);
11             }
12             Console.ReadKey();
2.對非基本類型進行排序,里面有兩個屬性,重寫了ToString方法
 1  class Student
 2     {
 3         private int studentId;
 4         private string studentName;
 5 
 6         public int StudentId { get => studentId; set => studentId = value; }
 7         public string StudentName { get => studentName; set => studentName = value; }
 8         //重寫構造方法
 9         public override string ToString()
10         {
11             return "studentId:" + studentId + " studentName:" + studentName;
12         }
13     }
然后添加一些數據,仍希望用Sort排序
 1    List<Student> studentList = new List<Student>();
 2             Student objStu1 = new Student() { StudentId = 1, StudentName = "小王" };
 3             Student objStu2 = new Student() { StudentId = 2, StudentName = "小李" };
 4             Student objStu3 = new Student() { StudentId = 3, StudentName = "小范" };
 5             studentList.Add(objStu1);
 6             studentList.Add(objStu2);
 7             studentList.Add(objStu3);
 8             studentList.Sort();
 9             foreach (Student objStu in studentList)
10             {
11                 Console.WriteLine(objStu);
12             }
13             Console.ReadKey();
然后就出錯了,出錯信息如下:
查看Sort源碼可知它有如下幾個重載
3.實現IComparable接口(默認排序)
可以看到它只有一個方法,我們只需要修改類本身
 1   class Student:IComparable<Student>
 2     {
 3         private int studentId;
 4         private string studentName;
 5 
 6         public int StudentId { get => studentId; set => studentId = value; }
 7         public string StudentName { get => studentName; set => studentName = value; }
 8 
 9         //實現接口
10         // 返回結果:
11         //     一個值,指示要比較的對象的相對順序。 返回值的含義如下:
12         // 值 含義 小於零 此實例在排序順序中位於 other 之前。 
13         //零 此實例中出現的相同位置在排序順序中是
14         // other。 大於零 此實例在排序順序中位於 other 之后。
15         public int CompareTo(Student other)
16         {
17             return this.studentId.CompareTo(other.studentId);
18         }
19 
20         //重寫構造方法
21         public override string ToString()
22         {
23             return "studentId:" + studentId + " studentName:" + studentName;
24         }
25     }
運行結果:
4.集合的動態排序
定義4個排序類,並且分別實現排序接口
 1  class Student : IComparable<Student>
 2     {
 3         private int studentId;
 4         private string studentName;
 5 
 6         public int StudentId { get => studentId; set => studentId = value; }
 7         public string StudentName { get => studentName; set => studentName = value; }
 8 
 9         //實現接口
10         // 返回結果:
11         //     一個值,指示要比較的對象的相對順序。 返回值的含義如下: 值 含義 小於零 此實例在排序順序中位於 other 之前。 零 此實例中出現的相同位置在排序順序中是
12         //     other。 大於零 此實例在排序順序中位於 other 之后。
13         public int CompareTo(Student other)
14         {
15             return this.studentId.CompareTo(other.studentId);
16         }
17 
18         //重寫構造方法
19         public override string ToString()
20         {
21             return "studentId:" + studentId + " studentName:" + studentName;
22         }
23     }
24         //添加4個排序類,並且分別實現排序接口
25         class StuNameASC : IComparer<Student>
26         {
27             public int Compare(Student x, Student y)
28             {
29                 return x.StudentName.CompareTo(y.StudentName);
30             }
31         }
32         class StuNameDESC : IComparer<Student>
33         {
34             public int Compare(Student x, Student y)
35             {
36                 return y.StudentName.CompareTo(x.StudentName);
37             }
38         }
39 
40         class StudentIdASC : IComparer<Student>
41         {
42             public int Compare(Student x, Student y)
43             {
44                 return x.StudentId.CompareTo(y.StudentId);
45             }
46         }
47         class StudentIdDESC : IComparer<Student>
48         {
49             public int Compare(Student x, Student y)
50             {
51                 return y.StudentId.CompareTo(x.StudentId);
52             }
53         }
1 在排序時使用Sort的重載方法  
2 public void Sort(IComparer<T> comparer);
3 傳遞的是實現這個接口的類的對象
4 studentList.Sort(new StudentIdASC):表示的是按照學號升序排列
結果如下:
5.總結
泛型集合中基本數據類型可以直接排序,非基本數據類型要自定義排序方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM