我是一個Delphi新手,我不知道如何調用記錄的TList的排序方法,以按升序整數值排序記錄。 我有類似下面的記錄:如何使用自定義比較器對通用列表進行排序?
type
TMyRecord = record
str1: string;
str2: string;
intVal: integer;
end;
認識到這些記錄泛型列表:
TListMyRecord = TList<TMyRecord>;
曾經試圖找到在幫助文件的代碼,例如,發現這一個:
MyList.Sort(@CompareNames);
我不能使用,因爲它使用類。於是,我就寫我自己的比較函數有一點不同的參數:
function CompareIntVal(i1, i2: TMyRecord): Integer;
begin
Result := i1.intVal - i2.intVal;
end;
但是編譯器總是拋出一個「沒有足夠的參數」 - 當我把它與open.Sort(CompareIntVal);
,這似乎是明顯的錯誤;所以我試圖更貼近幫助文件:
function SortKB(Item1, Item2: Pointer): Integer;
begin
Result:=PMyRecord(Item1)^.intVal - PMyRecord(Item2)^.intVal;
end;
與PMyRecord爲PMyRecord = ^TMyRecord;
我試圖調用一個函數,總是得到一些錯誤的方式不同......
謝謝檸了! 我需要包括任何東西'使用'除'使用''使用'除了'使用 Generics.Collections,...',因爲我得到'Tcomparison'和'IComparer''var'的未申報'var 比較:TComparison; IntegerComparer:IComparer ;'? –
您還需要Generics.Defaults。你有沒有找到RTL源代碼呢?這會幫助你。 –
@David,你確定'TComparer'是你提供的代碼的不錯選擇嗎? 'TComparer'是爲了抽象基類。我建議使用'TDelegatedComparer'作爲你的代碼。 – TLama