1. 程式人生 > >泛型 List中的Sort方法

泛型 List中的Sort方法

常用的兩種使用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的順序控制是升序還是降序,方法的返回值必須和介面中的方法保持一致

  • 參考多個欄位進行排序
自己實現方法,方法的返回值必須是int,在sort中使用lambda表示式實現排序 可以通過設定權重來控制欄位的優先順序
 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);
        }