caseInsensitiveCompare sortDescriptor的替代方案

时间:2011-09-25 02:49:37

标签: objective-c sorting

要排序的数组包含如下字符串:

200burgers
1apple
2burgers
11apples

和类似的。当使用caseInsenstive进行升序排序时,我得到:

11apples
1apple
200burgers
2burgers

这是有道理的,但我更喜欢一种词典排序,在“10”之前加“1”,在“100”之前加上“10”,例如:

1apple
11apples
2burgers
200burgers

我必须构建自定义比较器还是有其他选择?

2 个答案:

答案 0 :(得分:1)

我认为你可能需要一个自定义比较器,但这很简单:

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES comparator:^(id one, id two) {
    return [one compare:two options:NSCaseInsensitiveSearch | NSNumericSearch];
}];

答案 1 :(得分:0)

如果您无法调整字符串,那么您必须编写一个自定义比较器来搜索字符串中的非数字,并对字符串部分进行排序,然后对数字部分进行排序。

然而,将这两个元素作为单独的对象并使用- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors

会更容易

在哪里排序“string”然后“count”。简而言之,这些数字不会以您发布的连接形式正确排序。