Delphi 泛型集合的排序實例

           (譯自Delphi2009 Handbook)

 

TList的Sort方法:

            

procedure Sort; overload;

procedure Sort(const AComparer: IComparer<T>); overload;

 

 

其中的IComparer<T>接口是在Generics.Defaults單元定義的。如果你調用第一個版本默認的方法,它由TList<T>使用默認構造器初始化的,針對我們的情況它是沒有用的。

 

我們所需要做的,不是定義一個一般的IComparer<T>接口的實現。出於類型的兼容,我們需要定義一個專用於TDate類的實現。並且有多種方法可以實現這個目的。其中之一含匿名方法。一個很奇妙的技術--TComparer,屬於Gerneric.Default 單元,高級“結構化”的類,是個抽象類,並且通過泛型接口的實現,代碼如下:

 

 

 (第一種方法:派生出專用的比較器)

 我們需要實例化這個泛型類,用於在本例中指定的TDate類型數據,通過繼承一個具體的類,在其中實現用於特定類型的Compare方法。兩個操作可以在一個步驟完成,使用下面的代碼方法,需要一點時間去體會:

 

 

       如果你覺得上面的代碼看着很“不尋常”,很多人也會這麼認爲。新的類從一個特定泛型類的實例繼承,你可以把它分爲兩個步驟來表達:(這一段有點疑惑的地方 ,所以把原文附上:)

If you think this code looks very unusual, you're not alone. The new class inherits from a specific instance of the generic class, something you could express in two separate steps as:  (TComparer<TDate>是泛型形式的抽象類,爲什麼說特定的實例呢??)

 

 

   你可以在完整的代碼找奧Compare方法的實現,在這裏並不是要強調的關鍵。記住,雖然你可以用IndexOf方法排序列表,但這裏不可用(不像TStringList)。

 

 

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章