Wie sortiere ich eine allgemeine Liste mit einem benutzerdefinierten Vergleicher?
Ich bin ein bisschen ein Delphi-Neuling und verstehe nicht, wie die Sort-Methode einer TList of Records aufgerufen wird, um die Datensätze nach aufsteigendem Integer-Wert zu sortieren. Ich habe eine Aufzeichnung wie die folgende:
type
TMyRecord = record
str1: string;
str2: string;
intVal: integer;
end;
Und eine allgemeine Liste solcher Aufzeichnungen:
TListMyRecord = TList<TMyRecord>;
Habe versucht, ein Codebeispiel in den Hilfedateien zu finden und dieses gefunden:
MyList.Sort(@CompareNames);
Was ich nicht verwenden kann, da es Klassen verwendet. Also habe ich versucht, meine eigene Vergleichsfunktion mit ein wenig anderen Parametern zu schreiben:
function CompareIntVal(i1, i2: TMyRecord): Integer;
begin
Result := i1.intVal - i2.intVal;
end;
Aber der Compiler wirft immer einen "nicht genügend Parameter" -Fehler, wenn ich ihn mit aufrufeopen.Sort(CompareIntVal);
, was offensichtlich scheint; Deshalb habe ich versucht, näher an der Hilfedatei zu bleiben:
function SortKB(Item1, Item2: Pointer): Integer;
begin
Result:=PMyRecord(Item1)^.intVal - PMyRecord(Item2)^.intVal;
end;
mit PMyRecord alsPMyRecord = ^TMyRecord;
Ich habe verschiedene Methoden zum Aufrufen einer Funktion ausprobiert, wobei immer ein Fehler aufgetreten ist ...