The Sort
你应该使用的重载是这个:
procedure Sort(const AComparer: IComparer<TMyRecord>);
现在,您可以创建一个IComparer<TMyRecord>
通过致电TComparer<TMyRecord>.Construct
。像这样:
var
Comparison: TComparison<TMyRecord>;
....
Comparison :=
function(const Left, Right: TMyRecord): Integer
begin
Result := Left.intVal-Right.intVal;
end;
List.Sort(TComparer<TMyRecord>.Construct(Comparison));
我已经写了Comparison
函数作为匿名方法,但您也可以使用普通旧式非 OOP 函数或对象的方法。
比较函数的一个潜在问题是您可能会遇到整数溢出问题。因此您可以使用默认的整数比较器。
Comparison :=
function(const Left, Right: TMyRecord): Integer
begin
Result := TComparer<Integer>.Default.Compare(Left.intVal, Right.intVal);
end;
打电话可能会很贵TComparer<Integer>.Default
重复,以便您可以将其存储在全局变量中:
var
IntegerComparer: IComparer<Integer>;
....
initialization
IntegerComparer := TComparer<Integer>.Default;
另一个需要考虑的选项是在创建列表时传入比较器。如果您只使用此顺序对列表进行排序,那么会更方便。
List := TList<TMyRecord>.Create(TComparer<TMyRecord>.Construct(Comparison));
然后你可以用以下命令对列表进行排序
List.Sort;