![]() |
1
35
定义“正确”。
喜欢 Gerry 提到, tstringlist.sort排序 使用 安西姆帕雷斯特 和 异步文本 (我将用几行文字解释它是如何做到的)。
但是:tstringlist是灵活的,它包含
排序
,
定制排序
和
并列
,它们都是虚拟的(因此您可以在子类中重写它们)
答案是 比较 执行所需操作的函数:
定制排序 定义如下:
默认情况下, 排序 方法的实现非常简单,传递默认值 比较 函数称为 字符串列表比较字符串 以下内容:
所以,如果你定义了你自己的
t列表排序比较
兼容的
比较
方法,然后您可以定义自己的排序。
你可以使用 字符串列表比较字符串 作为实施自己的准则:
因此,默认情况下,tstringlist.sort将延迟到tlist.compareStrings:
然后使用隐藏的Windows API函数 CompareString 使用默认用户区域设置 LOCALE_USER_DEFAULT :
最后 比较 你需要的功能。同样的限制:
这是代码:
Delphi不是封闭的,恰恰相反:它通常是一个非常灵活的体系结构。
——杰罗恩 |
![]() |
2
5
ansicompartrest/ansicompartext考虑的字符数多于。他们考虑到用户的区域设置,因此“e”将与“_”、“_”等进行排序。 要使其按ASCII顺序排序,请使用自定义比较函数 as described here |
![]() |
3
0
ansicompartrest(与locale_user_default比较)有错误,因为它获取的字符的punctation等于: E1 γ1 E2 γ2 正确的顺序是(例如捷克语): E1 E2 γ1 γ2 有人知道如何在订购时避免这个错误吗? 11.2.2010:我必须道歉,所描述的行为完全符合语言规则。虽然我认为这是愚蠢和“坏”的,但它不是API函数中的错误。 windows xp中的explorer使用了所谓的直观的filname排序,它提供了更好的结果,但不能用于编程。 |