2
我有一个自定义排序TStringList
......为什么我的TStringList没有排序?
Items.CustomSort(@CompareWords);
......与此对比功能:
function CompareWords(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := StrIComp(PWideChar(List[Index1]), PWideChar(List[Index2]));
end;
但注意到一些问题,我的代码,它需要将列表中进行排序后,订单StrIComp
诱导,我创建了这个小检查...
for i := 1 to Items.Count - 1 do
begin
Assert(StrIComp(PWideChar(Items[i-1]), PWideChar(Items[i])) <= 0);
end;
...并且它失败。
为什么列表不正确排序?
1.您使用的是哪个Delphi版本? (IOW:项目[I]到PWideChar的有效吗?) 2.为什么使用StrIComp而不是简单的CompareText? 3.是否调用Sort OK的结果? – 2009-10-03 11:04:22
是的,演员表是正确的。我使用字符串列表来准备一个二进制文件,后来使用StrLIComp进行二进制搜索。我感觉更好,当两个部分使用相同的比较方法。 – 2009-10-03 11:37:19
当您调用'CustomSort'时,不要在函数前使用'@'。它可以掩盖比较函数声明中的错误。 (不过,在这种情况下,你没问题。)另外,请输入到'PChar',而不是'PWideChar'。仅仅因为它们对你而言是同一类型的,并不意味着它们将永远属于同一类型。 'TStringList'包含通用字符串,因此将其类型转换为通用'PChar'。 (即使*你*从未使用过不同的Delphi版本,其他来这里复制和粘贴代码的人可能会这样,所以最好不要在不需要时使用版本敏感的代码。) – 2009-10-03 17:33:23