Ich gehe mal davon aus, dass die Sortierung zur Laufzeit erfolgen soll. Um die Konstantendeklaration zu sortieren, hilft am Ende nur manuelles Verschieben der Zeilen.
Für die Sortierung zur Laufzeit benötigen wir ein dynamisches Array, was am einfachsten generisch als
TArray<TCode>
deklariert werden kann. In dieses kopieren wir die Werte aus GCodeB und sortieren es dann mit Hilfe der in
System.Generics.Default und
System.Generics.Collection deklarierten Klassen. Damit die Records auch numerisch sortiert werden, verwenden wir die in
System.Sysutils deklarierte string-Helper Funktion
Compare
mit der Option
coDigitAsNumbers
.
Delphi-Quellcode:
function GCodeBSorted: TArray<TCode>;
begin
SetLength(Result, Length(GCodeB));
for var I := 0 to Length(Result) - 1 do
Result[I] := GCodeB[Low(GCodeB) + I];
TArray.Sort<TCode>(Result, TDelegatedComparer<TCode>.Create(
function(const Left, Right: TCode): Integer
begin
Result := string.Compare(Left.Wort, Right.Wort, [coDigitAsNumbers]);
end));
end;
Dabei ist zu beachten, dass das dynamische Array immer mit dem Index 0 beginnt, während das GCodeB ja als
array [1 .. 35] of TCode
deklariert ist. Das ist beim Zugriff auf das sortierte Array zu beachten. Hier ein simples Beispiel für den Funktionsaufruf und die Ausgabe des sortierten Arrays:
Delphi-Quellcode:
var arr := GCodeBSorted;
for var rec in arr do
Writeln(rec.Wort, ': ', rec.Bezeichnung);