排序无法正常工作

时间:2012-11-05 10:09:53

标签: iphone objective-c sorting nsarray

我通过我的应用程序使用自定义命名保存文件目录中的一些文件“file1.format”,“file2.format”等等。后来我在一个数组中获取这些文件并将它们打印成循环然后它们是以排序的形式出现但是当我存储“file10.format”等问题时出现问题。在此之后,结果出现了一些意想不到的事情。在保存第10个文件后,输出就像

file1.foramt file10.format file2.format 。 。 file6.format file61.format file7.format 我不知道为什么排序在一个地方占据所有的1或2,如上所示,而预期10应该在9之后而不是1.I.我使用了所有类型的排序,但结果总是相同。

3 个答案:

答案 0 :(得分:2)

如果要“像Finder那样”对文件名进行排序,请使用localizedStandardCompare。特别是,字符串中的数字根据其数值进行排序:

NSArray *files = [NSArray arrayWithObjects:@"file10.format", @"file2.format", @"file1.format", nil];
NSArray *sorted = [files sortedArrayUsingSelector:@selector(localizedStandardCompare:)];
NSLog(@"%@", sorted);

输出:

2012-11-05 11:38:55.474 test77[533:403] (
    "file1.format",
    "file2.format",
    "file10.format"
)

答案 1 :(得分:1)

如果您想使用常规字符串排序序列,则应考虑重命名文件。 file00001.formatfile00002.format等等。在这种情况下,file00010.format跟随file00009.formatfile00011.format跟随

答案 2 :(得分:0)

它实际上正常工作。

file10.format

来吧

file2.format 

因为字符0被视为小于与其进行比较的字符.(两个字符在各自的文件名中位于相同的位置。

事实上,早在今天,在您使用花哨的图形操作系统的年轻人之前,这就是文件系统对文件进行排序的方式。 < /老人咆哮>