就像@yuri說的,sortedArrayUsingComparator:
應該提供基本功能。
下面是一個簡單的版本的排序與字母開頭的字符串後,用十進制數字開頭的字符串(在NSCharacterSet
的定義),和葉弦的所有其他組合爲它們的默認排序順序:
NSArray *arr = [NSArray arrayWithObjects:
@"ABC 09 GHJ", @"DEF23PO", @"123ABC", @"MCMLXV", @"[cocoa]", @"$2000", @"ERT", @"24seven", @"zero",
@"Ångström", @"Übernacht",
nil];
NSCharacterSet *digits = [NSCharacterSet decimalDigitCharacterSet];
NSCharacterSet *alphanums = [NSCharacterSet alphanumericCharacterSet];
NSArray *sorted = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 isKindOfClass:[NSString class]] && [obj1 length] > 0
&& [obj2 isKindOfClass:[NSString class]] && [obj2 length] > 0) {
unichar c1 = [obj1 characterAtIndex:0];
unichar c2 = [obj2 characterAtIndex:0];
if ([digits characterIsMember:c1] && (![digits characterIsMember:c2] && [alphanums characterIsMember:c2])) {
return NSOrderedDescending;
}
if ([digits characterIsMember:c2] && (![digits characterIsMember:c1] && [alphanums characterIsMember:c1])) {
return NSOrderedAscending;
}
}
return [obj1 compare: obj2];
}];
NSLog(@"Sorted: %@", sorted);
警告:它不會處理由十進制數字組成的unicode字母作爲正確的第一個組件,但我會認爲這是一個病態的情況,直到有人能夠啓發我。