TArray.Sort<Integer>(arr); {1}
funktioniert und ist über 10 Mal schneller als mit "eigenem Comparer" ({2} {3}).
Der oben vorgeschlagene Comparer Result := a-b; {2} funktioniert nicht für alle möglichen Array-Werte; zum Beispiel nicht für den Array mit den zwei Elementen maxint, -maxint.
Der Comparer {3} sortiert korrekt, ist aber wie {2} über 10 Mal langsamer als {1}.
Delphi-Quellcode:
uses
System.Generics.Collections, { TArray }
System.Generics.Defaults; { TComparer<T> }
...
var arr, brr : TArray<integer>;
...
{1}
TArray.Sort<Integer>(arr);
{2} // sortiert nicht korrekt
TArray.Sort<Integer>(brr, TComparer<Integer>.Construct(
function (const A, B: integer): Integer
begin
Result := a-b;
end));
{3}
TArray.Sort<Integer>(brr, TComparer<Integer>.Construct(
function (const A, B: integer): Integer
begin
if a < b then Result := -1
else
if a = b then Result := 0
else Result := 1;
end));