亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

iOS
LEATH 2019-07-25 09:37:28
如何在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]; }];


查看完整回答
反對 回復 2019-07-25
?
躍然一笑

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
)
*/


查看完整回答
反對 回復 2019-07-25
  • 3 回答
  • 0 關注
  • 412 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號