相关疑难解决方法(0)

如何在Delphi中以不同的方式对TStringList进行排序

我有一个简单的TStringList.我做了一个TStringList.Sort.

然后我注意到下划线"_"在大写字母"A"之前排序.这与排序相同文本并在A之后排序_的第三方软件包形成对比.

根据ANSI字符集,AZ是字符65 - 90,_是95.所以看起来第三方包使用该顺序而TStringList.Sort不是.

我深入研究了TStringList.Sort的内容,并使用AnsiCompareStr(Case Sensitive)或AnsiCompareText(Case Insensitive)进行排序.我尝试了两种方法,将我的StringList的CaseSensitive值设置为true,然后设置为false.但在这两种情况下,"_"首先排序.

我无法想象这是TStringList中的一个错误.所以这里肯定有其他东西我没有看到.可能是什么?

我真正需要知道的是如何让我的TStringList进行排序,使其与其他包的顺序相同.

作为参考,我使用Delphi 2009,我在我的程序中使用Unicode字符串.


所以这里的最终答案是覆盖Ansi与你想要的任何东西比较(例如非ansi比较),如下所示:

type
  TMyStringList = class(TStringList)
  protected
    function CompareStrings(const S1, S2: string): Integer; override;
  end;

function TMyStringList.CompareStrings(const S1, S2: string): Integer;
begin
  if CaseSensitive then
    Result := CompareStr(S1, S2)
  else
    Result := CompareText(S1, S2);
end;
Run Code Online (Sandbox Code Playgroud)

delphi sorting ansi tstringlist

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

ansi ×1

delphi ×1

sorting ×1

tstringlist ×1