字母数字数组排序

3

我有一组包含数字和字母的名称列表,当我运行下面的代码时,数字会排在 A-Z (0-9 A-Z) 的字母前面。

如何让这个 NSSortDescriptor 把数字放在数组的末尾呢?(A-Z 0-9)

NSSortDescriptor *sortNameSortDescriptor = 
[NSSortDescriptor sortDescriptorWithKey:@"sortName"
ascending:YES
selector:@selector(localizedStandardCompare:)];

NSArray *sortedArray = [sortSectionsArray sortedArrayUsingDescriptors:@[ sortNameSortDescriptor ]];
1个回答

2
也许您可以使用基于NSComparator的排序描述符?
粗略概述
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"sortName" ascending:YES
     comparator:^NSComparisonResult(NSString* obj1, NSString* obj2) 
     {
            //Return negative number, zero or positive based on 
            //first letter being number or alpha. 
            //If obj1 starts with a letter and obj2 starts with a number then
            //return NSOrderedAscending. . . otherwise just return [obj1 comppare:obj2];

            //To test if first chararacter is a letter:

            NSRange first = [obj1 rangeOfComposedCharacterSequenceAtIndex:0];
            NSRange match = [obj1 rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet] options:0 range:first];
            if (match.location != NSNotFound) {//Implement above comment}
     }];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接