我是一个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