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