要排序的数组包含如下字符串:
200burgers
1apple
2burgers
11apples
和类似的。当使用caseInsenstive进行升序排序时,我得到:
11apples
1apple
200burgers
2burgers
这是有道理的,但我更喜欢一种词典排序,在“10”之前加“1”,在“100”之前加上“10”,例如:
1apple
11apples
2burgers
200burgers
我必须构建自定义比较器还是有其他选择?
答案 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”。简而言之,这些数字不会以您发布的连接形式正确排序。