Delphi 泛型集合的排序实例

本文详细介绍了 Delphi 中 TList 类的 Sort 方法使用方式,包括如何通过实现 IComparer<T> 接口进行自定义排序,以及通过 TComparer 泛型类派生出适用于特定类型 TDate 的比较器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           (译自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)。

 

 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值