如何在NSArray上進行自然排序?我有一個對象數組,我需要按照“標題”鍵排序。它目前正在工作,雖然它使用的是ASCII排序而不是自然排序。標題是文件名,所以它們看起來像這樣:file1 file2 file3 ... file10 file11 file12正如你所料,我得到了:file1 file10 file11 file12 file2 file3 ...有沒有人知道NSArray排序功能內置了一種方法來獲得這種自然排序而不是字母排序?我發現了一些通用算法,但我希望有一些內置的...
3 回答
飲歌長嘯
TA貢獻1951條經驗 獲得超3個贊
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]; }];
躍然一笑
TA貢獻1826條經驗 獲得超6個贊
根據@ PeterHosey的回答,如果您正在使用一組字符串對象:
簡短的回答:
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 關注
- 412 瀏覽
添加回答
舉報
0/150
提交
取消
