Delphi XE - TObjectList排序

Mar*_*oni 10 delphi sorting delphi-xe4

我有一个这样的列表:

FMyScheduleList: TObjectList<TMySchedule>;
Run Code Online (Sandbox Code Playgroud)

它有一个属性:

property ADate: TDate read FDate write FDate;
Run Code Online (Sandbox Code Playgroud)

如何通过此属性对列表进行排序?

RRU*_*RUZ 22

您必须实现一个Custom IComparer函数将此实现传递给类的Sort方法System.Generics.Collections.TObjectList,您可以使用带有类似方法的匿名函数来执行此操作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
));
Run Code Online (Sandbox Code Playgroud)

正如@Stefan建议你也可以使用单位中CompareDate定义的功能System.DateUtils.

FMyScheduleList.Sort(TComparer<TMySchedule>.Construct(
      function (const L, R: TMySchedule): integer
      begin
         Result := CompareDate(L.ADate, R.ADate);
      end
));
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用`DateUtils.CompareDate`,它有三个优点:1.你可能不会混淆-1和1(偶然发生在我身上)2.它实际上只是比较日期部分和3.你的短代码代表 (9认同)