我有一个像这样的数组值:{apple,queen,microsoft,50cent}.我想按顺序排列数组的字母顺序和50cent.我正在使用以下方法,但它将50cent排在最前面:
[albums sortUsingDescriptors:[NSArray arrayWithObject:
[[[NSSortDescriptor alloc]
initWithKey:@"name"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]
autorelease]]];
Run Code Online (Sandbox Code Playgroud)
你可以使用比较器块.
在您的情况下,块应该执行以下操作:
检查两个字符串的第一个字母,它们是数字还是字母,做 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;
}];
Run Code Online (Sandbox Code Playgroud)
在使用时sortUsingDescriptors:,您必须使用NSMutableArray.您可以使用带有比较器的就地订购sortUsingComparator:.
[array sortUsingBlock:<The block stays the same>];
Run Code Online (Sandbox Code Playgroud)