如何在NSArray上進(jìn)行自然排序?我有一個對象數(shù)組,我需要按照“標(biāo)題”鍵排序。它目前正在工作,雖然它使用的是ASCII排序而不是自然排序。標(biāo)題是文件名,所以它們看起來像這樣:file1 file2 file3 ... file10 file11 file12正如你所料,我得到了:file1 file10 file11 file12 file2 file3 ...有沒有人知道NSArray排序功能內(nèi)置了一種方法來獲得這種自然排序而不是字母排序?我發(fā)現(xiàn)了一些通用算法,但我希望有一些內(nèi)置的...
3 回答

FFIVE
TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個贊
NSString
s時,可以比使用NSNumericSearch比較選項(xiàng)。
一個版本:
NSInteger sort(Obj* a, Obj* b, void*) { return [[a title] compare:[b title] options:NSNumericSearch];}result = [array sortedArrayUsingFunction:&sort context:nil];
或者更通用一點(diǎn):
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貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個贊
試圖在Mac OS X 10.6及更高版本和iOS 4及更高版本上復(fù)制Finder排序行為的用戶可以localizedStandardCompare:
用作比較器選擇器。
在早期版本的Mac OS X和/或iOS上具有相同目標(biāo)的用戶應(yīng)使用“字符串編程指南”中描述的解決方案。

慕勒3428872
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超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 關(guān)注
- 557 瀏覽
添加回答
舉報
0/150
提交
取消