delphi - 如何对类型列表进行排序

标签 delphi pointers tlist

<分区>

我有很多类型化的 TList,但我在排序时遇到了问题

通常,对于未类型化的 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)

但是我已经决定在我当前的应用程序中我们想要将 TList 锁定到某些指针类型,因此在上面的示例中我们将 JobList 声明为:

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

现在当我打电话

JobList[0].Sort(SortByJob)

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

有什么想法吗?

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

最佳答案

通用列表使用 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;

关于delphi - 如何对类型列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3477584/

相关文章:

Delphi 在窗体上使用单元过程

C++ 通过引用传递指针并分配默认值

Delphi TList<T> 复制到另一个 TList 中?

delphi - 取消附加备份服务

delphi - 变体递归地使用自身?

c++ - 为什么我不能通过 const 指针修改变量?

delphi - 类型转换 TList<T :class> to TList<W:class>

Delphi:用于索引 TStringList 项的 Integer 以外的类型

windows - delphi中的多种形式

c - 链表交换期间未传递指针