NSArray的字符串排序问题

时间:2013-11-14 11:58:53

标签: objective-c arrays string sorting

所以我有以下代码:

NSArray *pathArray = @[@"path/Documents/page9.png",
    @"path/Documents/page8.png",
    @"path/Documents/page10.png",
    @"path/Documents/page11.png",
    @"path/Documents/page0.png",
    @"path/Documents/page12.png",
    @"path/Documents/page6.png",
    @"path/Documents/page4.png",
    @"path/Documents/page5.png",
    @"path/Documents/page1.png",
    @"path/Documents/page7.png",
    @"path/Documents/page3.png",
    @"path/Documents/page2.png"];

如果我现在使用以下方式对数组进行排序:

[pathArray sortUsingSelector:@selector(caseInsensitiveCompare:)];

数组以错误的方式排序

结果:

pathArray: (
    "path/Documents/page0.png",
    "path/Documents/page1.png",
    "path/Documents/page10.png",
    "path/Documents/page11.png",
    "path/Documents/page12.png",
    "path/Documents/page2.png",
    "path/Documents/page3.png",
    "path/Documents/page4.png",
    "path/Documents/page5.png",
    "path/Documents/page6.png",
    "path/Documents/page7.png",
    "path/Documents/page8.png",
    "path/Documents/page9.png"}

具有组件"page10.png", "page11.png" and "page12.png"的元素应该是最后三个元素。是否存在涵盖此问题的其他选择器?

如果不能怎么做呢?

2 个答案:

答案 0 :(得分:4)

您可以使用以下方法实现自己的比较方法:

[pathArray sortUsingComparator:^(id one, id two) {
    return [one compare:two options:NSCaseInsensitiveSearch | NSNumericSearch];
}

答案 1 :(得分:1)

这是因为与您的文件名不一致,例如:

path/Documents/page0.png

应该是:

path/Documents/page00.png

其中每个文件都有一个2位数字。一旦你解决了这个问题,你的排序就可以了。