Search code examples
delphisortingdelphi-xe4

Delphi XE - TObjectList Sorting


I have a list like this:

FMyScheduleList: TObjectList<TMySchedule>;

It has a property:

property ADate: TDate read FDate write FDate;

How can I sort the list by this property?


Solution

  • You must implement a Custom IComparer function passing this implementation to the Sort method of the System.Generics.Collections.TObjectList class, you can do this using an anonymous with a method with the System.Generics.Defaults.TComparer like so .

    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
    ));
    

    As @Stefan suggest also you can use CompareDate function which is defined in the System.DateUtils unit.

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