泛型 List中的Sort方法
阿新 • • 發佈:2019-01-06
常用的兩種使用scort()進行排序的方法
- 對於List按照某一個欄位的值進行排序,使用系統提供的sort方法進行排序,需要繼承ICompare介面實現引數中的CompareTo方法,注意引數一定是Object。CompareTo方法只能進行兩個資料的比較,但是系統可以實現對整個list中的資料的排序。
List<Student> stuList = new List<Student>(); stuList.Add(s1); stuList.Add(s2); stuList.Add(s3); stuList.Add(s4); stuList.Add(s5); stuList.Add(s6); for (int i = 0; i < stuList.Count; i++) { Console.WriteLine(stuList[i]); } Console.WriteLine("------------------------"); stuList.Sort(); for (int i = 0; i < stuList.Count; i++) { Console.WriteLine(stuList[i]); } public int CompareTo(object other) { return this.Age - ((Student)other).Age; }
ps:可以通過改變this.Age和other.Age的順序控制是升序還是降序,方法的返回值必須和介面中的方法保持一致
- 參考多個欄位進行排序
List<Student> stuList = new List<Student>(); stuList.Add(s1); stuList.Add(s2); stuList.Add(s3); stuList.Add(s4); stuList.Add(s5); 多個方法之間要使用 + 號 stuList.Sort(((x, y) => x.sortByAge(y) * 4 + x.sortByChinese(y)));//系統規定必須是int for (int i = 0; i < stuList.Count; i++) { Console.WriteLine(stuList[i]); } public int sortByAge(Student s) { int result = this.Age - s.Age; return result==0?0:(result>0?1:-1); } public int sortByChinese(Student s) { int result= (int)(s.Chinese-this.Chinese);//變數的位置確定了正序還是倒序 return result == 0 ? 0 : (result > 0 ? 1 : -1); }