2

並べ替えに問題がある型付きTリストがいくつかあります

通常、型指定されていない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関数を使用すると、正しくコンパイルされることを比較しました...

4

1 に答える 1

11

ジェネリック リストは、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;
于 2010-08-13T14:23:37.223 に答える