Wenn du beispielsweise ein Array von Records oder sonstwas sortieren willst kannst du bei TArray.Sort auch einen IComparer<T> angeben.
Siehe Doku
Sieht dann, etwas länglich, so aus:
Delphi-Quellcode:
program Project11;
{$APPTYPE CONSOLE}
{$R *.res}
uses System.Generics.Collections, System.Generics.Defaults;
type
TMyRecord = record
alsWort: String;
alsZahl: Integer;
end;
var
a, b, c: TMyRecord;
comparer: IComparer<TMyRecord>;
meinArray: TArray<TMyRecord>;
begin
a.alsWort := 'Dreiundzwanzsch'; a.alsZahl := 23;
b.alsWort := 'Nüscht'; b.alsZahl := 0;
c.alsWort := 'Sievenunfünfzsch'; c.alsZahl := 57;
comparer := TComparer<TMyRecord>.Construct(
function(const left, right: TMyRecord): Integer
begin
Result := TComparer<Integer>.Default.Compare(left.alsZahl, right.alsZahl);
end
);
SetLength(meinArray, 3); meinArray[0] := a; meinArray[1] := b; meinArray[2] := c;
// Ab XE7 ginge stattdessen auch das hier:
//meinArray := [a, b, c];
TArray.Sort<TMyRecord>(meinArray, comparer);
WriteLn(meinArray[0].alsWort);
WriteLn(meinArray[1].alsWort);
WriteLn(meinArray[2].alsWort);
ReadLn;
end.