Jak posortować ogólną listę za pomocą niestandardowego porównania?
Jestem w pewnym sensie nowicjuszem Delphi i nie rozumiem, w jaki sposób wywoływana jest metoda sortowania TList rekordów, aby posortować rekordy według rosnącej wartości całkowitej. Mam rekord podobny do następującego:
type
TMyRecord = record
str1: string;
str2: string;
intVal: integer;
end;
I ogólna lista takich rekordów:
TListMyRecord = TList<TMyRecord>;
Próbowałem znaleźć przykładowy kod w plikach pomocy i znalazłeś ten:
MyList.Sort(@CompareNames);
Którego nie mogę użyć, ponieważ używa klas. Próbowałem więc napisać własną funkcję porównania z nieco innymi parametrami:
function CompareIntVal(i1, i2: TMyRecord): Integer;
begin
Result := i1.intVal - i2.intVal;
end;
Ale kompilator zawsze zgłasza „niewystarczające parametry” - błąd, gdy go wywołamopen.Sort(CompareIntVal);
, co wydaje się oczywiste; więc starałem się być bliżej pliku pomocy:
function SortKB(Item1, Item2: Pointer): Integer;
begin
Result:=PMyRecord(Item1)^.intVal - PMyRecord(Item2)^.intVal;
end;
z PMyRecord jakPMyRecord = ^TMyRecord;
Próbowałem różnych sposobów wywoływania funkcji, zawsze pojawia się jakiś błąd ...