习惯了标准的字符串排序方式,当我注意到Windows以一种高级方式按文件名对文件排序时,我感到惊讶。让我举一个例子:
Track1.mp3 Track2.mp3 Track10.mp3 Track20.mp3
我认为这些名称是根据字母和数字分别进行比较(排序时)的。
另一方面,以下是按标准方式排序的相同列表: Track1.mp3 Track10.mp3 Track2.mp3 Track20.mp3
我想在Delphi中创建一个比较算法,让我以相同的方式对字符串进行排序。刚开始,我认为比较两个字符串(如果是字母)的连续字符就足够了。当在两个字符串的某个位置都找到一个数字时,我将读取跟随它们的所有数字以形成一个数字,然后比较这些数字。
举个例子,我将以这种方式比较“ Track10”和“ Track2”字符串: 1)在字符相等且为字母的情况下读取字符:“ Track”,“ Track” 2)如果找到数字,读取以下所有数字:“ 10”,“ 2” 2a)如果它们相等,则转到1或否则完成 十大于二,因此“ Track10”大于“ Track2”
似乎一切都会好起来,直到我在测试中注意到Windows认为“ Track010”比“ Track10”低时,而我认为第一个更大,因为它更长了(根据我的算法并没有提到字符串将相等,这是错误的)。
您能否为我提供Windows如何按名称对文件进行精确排序的想法,或者您有一个可以使用的即用型算法(任何编程语言)?
非常感谢! 马吕斯
Jeff在《编码恐怖》上写了一篇有关此的文章。这称为自然排序,您可以在其中有效地将一组数字视为单个“字符”。在阳光下,每种语言都有实现,但是奇怪的是,它通常不是大多数语言的标准库内置的。