По сути тот же комментарий, что и выше, но вот полный источник и вывод, чтобы доказать, что он работает (протестировано на симуляторе iOS 4.3):
NSArray * strings = [NSArray arrayWithObjects: @"Seinfeld (Season 6)", @"Batman", @"Seinfeld (Season 5)", @"Zoolander", nil];
NSArray * sorted1 = [strings sortedArrayUsingComparator: ^(id first, id second) {
return [(NSString *)first compare:(NSString *)second options: NSNumericSearch];
}];
NSArray * sorted2 = [strings sortedArrayUsingComparator: ^(id first, id second) {
return - [(NSString *)first compare:(NSString *)second options: NSNumericSearch];
// or (to be more clear, but less efficient)
// return -1 * [(NSString *)first compare:(NSString *)second options: NSNumericSearch];
}];
NSLog(@"starting: %@", strings );
NSLog(@"sort1: %@", sorted1 );
NSLog(@"sort2: %@", sorted2 );
output:
2011-10-19 02:09:07.557 test2222[16793:207] starting: (
"Seinfeld (Season 6)",
Batman,
"Seinfeld (Season 5)",
Zoolander
)
2011-10-19 02:09:07.558 test2222[16793:207] sort1: (
Batman,
"Seinfeld (Season 5)",
"Seinfeld (Season 6)",
Zoolander
)
2011-10-19 02:09:07.558 test2222[16793:207] sort2: (
Zoolander,
"Seinfeld (Season 6)",
"Seinfeld (Season 5)",
Batman
)
В ответ на Итана Аллена вот результат теста с числами впереди:
2011-12-14 21:01:26.535 Test[7475:f803] starting: (
"2001 Seinfeld (Season 6)",
"1999 Batman",
"2112 Seinfeld (Season 5)",
"10 Zoolander"
)
2011-12-14 21:01:26.537 Test[7475:f803] sort1: (
"10 Zoolander",
"1999 Batman",
"2001 Seinfeld (Season 6)",
"2112 Seinfeld (Season 5)"
)
2011-12-14 21:01:26.537 Test[7475:f803] sort2: (
"2112 Seinfeld (Season 5)",
"2001 Seinfeld (Season 6)",
"1999 Batman",
"10 Zoolander"
)