【问题标题】:Delphi XE - TObjectList SortingDelphi XE - TObjectList 排序
【发布时间】:2014-03-21 15:26:36
【问题描述】:

我有一个这样的列表:

FMyScheduleList: TObjectList<TMySchedule>;

它有一个属性:

property ADate: TDate read FDate write FDate;

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

【问题讨论】:

    标签: delphi sorting delphi-xe4


    【解决方案1】:

    您必须实现一个自定义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,但是IntegerBoolean 有现成的函数吗?目前我自己制作了CompareInt
    • @JerryDodge 看起来所有类型的数字都有一个,称为 CompareValue。 docwiki.embarcadero.com/Libraries/Sydney/en/…
    猜你喜欢
    • 2011-06-14
    • 2017-12-24
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多