【发布时间】:2014-03-21 15:26:36
【问题描述】:
我有一个这样的列表:
FMyScheduleList: TObjectList<TMySchedule>;
它有一个属性:
property ADate: TDate read FDate write FDate;
如何按此属性对列表进行排序?
【问题讨论】:
标签: delphi sorting delphi-xe4
我有一个这样的列表:
FMyScheduleList: TObjectList<TMySchedule>;
它有一个属性:
property ADate: TDate read FDate write FDate;
如何按此属性对列表进行排序?
【问题讨论】:
标签: delphi sorting delphi-xe4
您必须实现一个自定义IComparer 函数,将此实现传递给System.Generics.Collections.TObjectList 类的Sort 方法,您可以使用带有System.Generics.Defaults.TComparer 方法的匿名方法来做到这一点,就像这样。
FMyScheduleList.Sort(TComparer<TMySchedule>.Construct(
function (const L, R: TMySchedule): integer
begin
if L.ADate=R.ADate then
Result:=0
else if L.ADate< R.ADate then
Result:=-1
else
Result:=1;
end
));
正如@Stefan 建议的那样,您也可以使用System.DateUtils 单元中定义的CompareDate 函数。
FMyScheduleList.Sort(TComparer<TMySchedule>.Construct(
function (const L, R: TMySchedule): integer
begin
Result := CompareDate(L.ADate, R.ADate);
end
));
【讨论】:
DateUtils.CompareDate,它有 3 个优点: 1. 你可能不会混淆 -1 和 1(一直发生在我身上) 2. 它实际上只是比较日期部分和3. 在你的委托中更短的代码
CompareText,但是Integer 和Boolean 有现成的函数吗?目前我自己制作了CompareInt。