2012-10-15 16 views
3

我一直在閱讀一些關於訂購一個NSMutable數組的帖子,但一直沒有得到它的工作,本質上我有一個tableview中的條目數量,可以添加無限量,但我需要通過一個包含數字值的NSMutable數組來排序,這將會遠遠高於10.我真的很感謝任何人可以給我的幫助,我一直在使用比較參數,但我似乎無法得到它反過來,其次我讀到10以上的數字會開始以奇怪的方式排序。我不久後發佈y代碼,但任何對我來說都是非常重要的。以降序購買一個NSMutable數組

感謝

回答

6

答案取決於你的數組中的對象是否數字一點。還有各種方法來排列數組(sortUsingDescriptorssortUsingComparator,...)。

NSMutableArray *a = [NSMutableArray arrayWithObjects:@1, @55, @9, @17, nil]; 
[a sortUsingComparator:^NSComparisonResult(NSNumber *obj1, NSNumber *obj2) { 
    return -[obj1 compare:obj2]; 
}]; 
// Result: 55, 17, 9, 1. 

注意減號其中具有逆轉令的效力比較器模塊:

如果你有數字的陣列,可以在例如像這樣的遞減順序進行排序從增加到減少。

如果你有數組,而你以同樣的方式進行,那麼你會得到你叫什麼「上面10號將開始在一種奇怪的方式訂購」:

NSMutableArray *a = [NSMutableArray arrayWithObjects:@"1", @"55", @"9", @"17", nil]; 
[a sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { 
    return -[obj1 compare:obj2]; 
}]; 
// Result: 9, 55, 17, 1. 

對象按字符串排序,而不是數字。

的解決方案是使用NSNumericSearch選項:

NSMutableArray *a = [NSMutableArray arrayWithObjects:@"1", @"55", @"9", @"17", nil]; 
[a sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { 
    return -[obj1 compare:obj2 options:NSNumericSearch]; 
}]; 
// Result: 55, 17, 9, 1. 
+0

感謝馬丁,得到成功的治療,給了我一些精彩的例子,我用nsuinteger作爲數組裏面我的數據類型和它完美地命令他們。 – SmokersCough

+1

@SmokersCough:好吧,我很高興它有幫助。 –