Ja du kannst natürlich auch CustomSort verwenden. CustomSort ist etwas langsamer* als die Lösung via Sort (bei 5 Mio Elementen ca. 50%), aber dafür sehr übersichtlich.
*langsamer...: Die Vergleichsfunktion v(f(list[index1]), f(list[index2]) ) in CustomCompare wird bei der Ausführung von CustomSort ca. lb(n)*n Mal aufgerufen. => Die Funktion f wird 2*lb(n)*n Mal aufgerufen. => CustomCompare berechnet für jedes der n Listenelemente l[i] den Wert f(l[i]) im Schnitt 2*lb(n) Mal (statt 1 Mal via Sort). Je komplexer die Funktion f ist, desto weniger lohnt sich (punkto Rechenaufwand) der Weg über CusomtSort.
Delphi-Quellcode:
function CustomCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := AnsiCompareText( Copy(List[index1],5,4), Copy(List[index2],5,4) );
end;
procedure TForm115.Button1Click(Sender: TObject);
var arr, hs : TStringList;
anz, i : integer;
begin
anz := 5000;
arr := TStringList.Create;
for i := 0 to anz do arr.Add(inttohex( random($FFFFFFFF), 8 ) + inttohex( random($FFFFFFFF), 8 ));
hs := TStringList.Create;
hs.Text := arr.Text;
// Mit CustomSort
hs.CustomSort( CustomCompare );
hs.Text := arr.Text;
// Mit Sort
for i := 0 to anz do
hs.Strings[i] := Copy(hs.Strings[i],5,4) + hs.Strings[i];
hs.Sort;
for i := 0 to anz do
hs.Strings[i] := Copy( hs.Strings[i],5,maxint );
hs.Free;
arr.Free;
end;