如何对Typed Tlist进行排序

时间:2010-08-13 14:05:19

标签: delphi pointers tlist

我有一些Typed TLists,我在排序时遇到问题

通常,对于无类型的TList,我会有一个函数,如:

function SortByJob(Item1: Pointer; Item2: Pointer): Integer;
var
  p1, p2: JobPointer;
begin
   p1 := JobPointer(Item1);
   p2 := JobPointer(Item2);
   if p1.job > p2.job then
      Result := 1
   else
      if p1.job = p2.job then
         Result := 0
      else
         Result := -1
end;

列表将调用

JobList.Sort(SortByJob)

但是我已经在我当前的应用程序中决定将TLists锁定到某些指针类型,所以在上面的例子中我们将JobList声明为:

JobList: array[0..4] of TList<JobsPointer>;

现在我打电话

JobList[0].Sort(SortByJob)

我收到“参数不够”错误。

有什么想法吗?

我比较过,如果我在无类型的“标准”TList上使用上面的Sort函数,那么它将正确编译...

1 个答案:

答案 0 :(得分:10)

使用IComparer的实例对通用列表进行排序。以下是对整数列表进行排序的示例:

uses Generics.Collections, Generics.Defaults;

procedure TForm1.FormCreate(Sender: TObject);
var
  L : TList<integer>;
begin
  L := TList<integer>.Create;
  L.Add(2);
  L.Add(1);

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

  L.Free;
end;