如何在NSArray上进行自然排序?我有一个对象数组,我需要按照“标题”键排序。它目前正在工作,虽然它使用的是ASCII排序而不是自然排序。标题是文件名,所以它们看起来像这样:file1 file2 file3 ... file10 file11 file12正如你所料,我得到了:file1 file10 file11 file12 file2 file3 ...有没有人知道NSArray排序功能内置了一种方法来获得这种自然排序而不是字母排序?我发现了一些通用算法,但我希望有一些内置的...
3 回答
FFIVE
TA贡献1797条经验 获得超6个赞
NSString
s时,可以比使用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
TA贡献1780条经验 获得超1个赞
试图在Mac OS X 10.6及更高版本和iOS 4及更高版本上复制Finder排序行为的用户可以localizedStandardCompare:
用作比较器选择器。
在早期版本的Mac OS X和/或iOS上具有相同目标的用户应使用“字符串编程指南”中描述的解决方案。
慕勒3428872
TA贡献1848条经验 获得超6个赞
如果您正在使用一组字符串对象:
简短的回答:
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 ) */
- 3 回答
- 0 关注
- 516 浏览
添加回答
举报
0/150
提交
取消