泛型排序sort()

1、基本數據類型的泛型(int,double ,string等)直接調用sort函數排序即可

 List<string> NameLst = new List<string>() { "asdf","aered"};

NameLst.Sort();

通過調用集合的Reverse()可實現反轉



2、對象型泛型排序

Goat 是類,Goat1,Goat2是類的實例,

    class Goat   
    {
        private string _name;

        private int _age;
        public string Name
        {
            get { return _name; }


        }


        public int  Age
        {
            get { return _age; }
        }
        public Goat(string Name)
        {
            _name = Name;
        }

..........................

}

List<Goat> GoatLst = new List<Goat>() {Goat1,Goat2 };

如果直接調用GoatLst .sort()  會報錯:未能比較數組中的兩個元素。因爲不知道不知道按照什麼進行排序

對象型排序可以通過排序接口 按照對象的某個基本類型的成員進行排序。

類的聲明需要繼承比較接口


class Goat:IComparable<Goat> //泛型比較接口

在vs中Alt + Enter 可看到實現接口顯示實現接口

點擊實現接口 ,自動生成CompareTo函數。

public int CompareTo(Goat other)
        {
            //在此函數中實現排序

          //降序

           return other.Name.CompareTo(this.Name);

         //升序 return this.Name.CompareTo(other.Name);
        }

然後調用GoatLst .sort() 就會直接調用CompareTo函數,也就是通過

Name字段進行排序


點擊 顯示實現接口   生成的函數如下

區別在於:當有繼承了多個接口或類,且不止一個接口 或類中有CompareTo這個函數,需要通過接口或類名來進行顯示

區分具體調用的是那個接口的CompareTo函數。比較的代碼與實現接口一樣

int IComparable<Goat>.CompareTo(Goat other)
        {
            throw new NotImplementedException();
        }





缺點:排序接口一個類中只能實現一個比較方法。

上例中實現了通過Name字段進行排序,如果還希望添加通過age排序,

就需要使用接下來介紹

的方法。



3、動態排序

通過繼承 IComparer 的排序類實現

步驟一,實現排序類,  如下聲明實現了4個排序類

     class GoatNameASC : IComparer<Goat>//升序排name
    {
        public int Compare(Goat x, Goat y)
        {
            return x.Name.CompareTo(y.Name);
        }
    }
    class GoatNameDES : IComparer<Goat>//降序排name
    {
        public int Compare(Goat x, Goat y)
        {
            return y.Name.CompareTo(x.Name);
        }
    }
    class GoatAgeASC : IComparer<Goat>//升序排age
    {
    {
        public int Compare(Goat x, Goat y)
        {
            return x.Age.CompareTo(y.Age);
        }
    }
    class GoatAgeDES : IComparer<Goat>//降序排age
    {
        public int Compare(Goat x, Goat y)
        {
            return y.Age.CompareTo(x.Age);
        }
    }


第二步:調用


List<Goat> GoatLst = new List<Goat>() {Goat1,Goat2 };

GoatLst.Sort(new GoatAgeASC());//age升序排
 GoatLst.Sort(new GoatAgeDES());//age降序排
 GoatLst.Sort(new GoatNameASC());//name升序排
 GoatLst.Sort(new GoatNameDES());//name降序排







發佈了68 篇原創文章 · 獲贊 11 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章