1

我通过我的应用程序将一些文件保存在文档目录中,使用自定义命名为“file1.format”、“file2.format”等等。后来我在一个数组中获取这些文件并在循环中打印它们然后它们进入排序形式,但当我存储“file10.format”等时出现问题。在这之后的结果来得有些出乎意料。在保存第 10 个文件后,输出就像

文件1.foramt 文件10.format 文件2.format 。. file6.format file61.format file7.format 我不知道为什么排序将所有 1 或 2 放在一个位置,如上所示,而预计 10 应该在 9 之后而不是在 1 之后。我使用了所有类型的排序,但是结果总是一样的。

4

3 回答 3

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"
)
于 2012-11-05T10:47:47.620 回答
1

如果您想使用常规的字符串排序顺序,那么您应该考虑重命名您的文件。file00001.formatfile00002.format等等。在这种情况file00010.formatfile00009.formatfile00011.format接下来是

于 2012-11-05T10:20:25.697 回答
0

它实际上工作正常。

file10.format

来之前

file2.format 

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

事实上,在你们年轻人还没有花哨的图形操作系统之前,文件系统也是这样对文件进行排序的。</老人吐槽>

于 2012-11-05T10:14:35.193 回答