Objective-c以正确的顺序对带有字母数字字符串的NSArray进行排序

时间:2017-03-29 14:33:04

标签: ios objective-c arrays sorting

我有一个包含数字的字符串数组,例如Shift 1 RT9909我按如下方式对数组进行排序:

NSSet *forms = dataObject.rtForms;

NSSortDescriptor *nameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"type" ascending:YES];
NSArray *sorted = [forms sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameDescriptor]];

当元素数量低于10时,此方法正常。此点Shift 10 RT9909放在前面Shift 2 RT9909

所以我的问题是如何对数组进行排序,以便Shift 10 RT9909跟随Shift 9 RT9909

1 个答案:

答案 0 :(得分:2)

由于Larme建议您将ComparatorNSNumericSearch一起使用,您还可以与NSSortDescriptor结合使用

NSSortDescriptor *nameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"type" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
    return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
NSArray *sortedArray = [anArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameDescriptor]];