我有一个像这样的数组值:{apple,queen,microsoft,50cent}。我想按顺序排列数组的字母顺序和50cent。我正在使用以下方法,但它将50cent排在最前面:
[albums sortUsingDescriptors:[NSArray arrayWithObject:
[[[NSSortDescriptor alloc]
initWithKey:@"name"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]
autorelease]]];
答案 0 :(得分:5)
您可以使用comparator blocks。
在您的情况下,该块应该执行以下操作:
检查两个字符串的第一个字母,无论是数字还是字母,请return [obj1 compare:obj2]
如果第一个对象以数字开头,而第二个对象以字母return NSOrderedAscending
开头,如果是相反的话,return NSOrderedDescending
获取第一个字母,请使用[obj1 substringToIndex:1]
这个想法的完整代码:
NSArray *array = [NSArray arrayWithObjects:@"peach",@"apple",@"banana",@"ananas",@"50cents", @"papaya", nil];
array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSString *s1 = [obj1 substringToIndex:1];
NSString *s2 = [obj2 substringToIndex:1];
if ([s1 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location == [s2 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location) {
return [obj1 compare:obj2];
} else {
if ([s1 rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location == NSNotFound) {
return NSOrderedAscending;
}
}
return NSOrderedDescending;
}];
当您使用sortUsingDescriptors:
时,您必须使用NSMutableArray。您可以使用sortUsingComparator:
的比较器进行就地排序。
[array sortUsingBlock:<The block stays the same>];