请问如何在NSArray上进行自然排序?

如何在NSArray上进行自然排序?

我有一个对象数组,我需要按照“标题”键排序。它目前正在工作,虽然它使用的是ASCII排序而不是自然排序。标题是文件名,所以它们看起来像这样:

file1 
file2 
file3 
... 
file10 
file11 
file12

正如你所料,我得到了:

file1 
file10 
file11 
file12 
file2 
file3 
...

有没有人知道NSArray排序功能内置了一种方法来获得这种自然排序而不是字母排序?我发现了一些通用算法,但我希望有一些内置的...


梵蒂冈之花
浏览 470回答 3
3回答

FFIVE

NSStrings时,可以比使用NSNumericSearch比较选项。一个版本:NSInteger sort(Obj* a, Obj* b, void*) {     return [[a title] compare:[b title] options:NSNumericSearch];}result = [array sortedArrayUsingFunction:&sort context:nil];或者更通用一点:NSInteger sort(id a, id b, void* p) {     return [[a valueForKey:(NSString*)p]              compare:[b valueForKey:(NSString*)p]             options:NSNumericSearch];}result = [array sortedArrayUsingFunction:&sort context:@"title"]或使用块:result = [array sortedArrayUsingComparator:^(Obj* a, Obj* b) {      return [[a title] compare:[b title] options:NSNumericSearch]; }];

慕神8447489

试图在Mac OS X 10.6及更高版本和iOS 4及更高版本上复制Finder排序行为的用户可以localizedStandardCompare: 用作比较器选择器。在早期版本的Mac OS X和/或iOS上具有相同目标的用户应使用“字符串编程指南”中描述的解决方案。

慕勒3428872

如果您正在使用一组字符串对象:简短的回答:NSArray *orderedTitles = [unorderedTitles sortedArrayUsingSelector:@selector(localizedStandardCompare:)];完整示例:NSArray *unorderedTitles = @[     @"file12",     @"file1",     @"file10",     @"file3",     @"file2",     @"file11"];NSArray *orderedTitles = [unorderedTitles sortedArrayUsingSelector:@selector(localizedStandardCompare:)];NSLog(@"orderedTitles = %@", orderedTitles);/* orderedTitles = (     file1,     file2,     file3,     file10,     file11,     file12 ) */
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS