Delphi 泛型中数据内容比较

admin3个月前教程136

第一:你需要引入 System.Generics.Defaults 单元,系统默认实现的比较方法,都在该单元定义。

第二:你要明确下你的需求,是只比较相等就可以,还是要比较大小。

  • IEqualityComparer<T> 是用来比较两个值是否相等的接口

  • IComparer<T> 是用来比较两个值大小的接口

第三:确定是否要自己实现比较函数还是使用默认的比较函数,如果使用默认的比较函数:

  • IEqualityComparer<T> 的值取 TEqualityComparer<T>.Default

  • IComparer<T> 的值取 TEqualityComparer<T>.Default

如果要实现自己的比较函数,则可以使用预置的封装加一个匿名函数实现:

  • IEqualityComparer<T> 的值取 TEqualityComparer<T>.Construct(…)

  • IComparer<T> 的值取 TEqualityComparer<T>.Construct(…)

执行实现比较时,使用对应的 IComparer<T>.Compare 或 IEqualityComparer<T>.Equals 来比较。

标签: delphi

相关文章

运行时动态修改 FMX 样式

运行时动态修改 FMX 样式

简单说几个点:1、FMX 框架下,样式是通过名称来标志的。2、GetStyleObject 默认是克隆原始的样式,所以直接修改对象自身的 FResourceLink 实例,不会影响其它样式,如果要修改...

一个共享的计时器类封装

QDAC 4.0 中已经包含了此单元,名称改为qdac.timer.share,使用 TQShareTimer 来做相关处理。这个是一个精度为秒的共享定时器实现,可以秒为单位创建多个共享的定时器,这些...

Delphi 函数的内部函数在匿名回调函数中无法使用的一种解决办法

这个问题很简单,将对应的函数改写赋值到一个匿名函数变量即可。function test;   function add(x,y:Integer):Intege...

高效处理在主线程中显示后台线程处理进度

先看经典的处理方法:TThread.CreateAnonymousThread(     procedure     ...