2013-12-12 140 views
0

希望有人可以提供幫助。用對象對NSMutableArray進行排序

我添加了多個對象到一個NSMutableArray,我需要根據第一個元素來排序,這個元素總是一個數字。

但是我不確定如何做到這一點?

例如:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
NSArray *object = [NSArray arrayWithObjects: @"1",@"Test",@"Test"]; 
[array addObject:object]; 

感謝

+1

你可以展示你到目前爲止已經嘗試過什麼,哪些不起作用? –

+0

你是否總是在你的mutableArray中添加數組? – shinyuX

+2

順便說一句 - 第一個值不是數字,它是一個字符串。 – rmaddy

回答

1

如果陣列始終包含其他數組,而最裏面的數組的第一個元素總是包含數字的字符串,你可以使用的NSMutableArray方法sortUsingComparator排序的數組:

[array sortUsingComparator: ^(NSArray* obj1, NSArray* obj2) 
{ 
    int value1 = [obj1[0] integerValue]; 
    int value2 = [obj2[0] integerValue]; 
    if (value1==value2) 
    return NSOrderedSame; 
    else if (value1 < value2) 
    return NSOrderedAscending; 
    else 
    return NSOrderedDescending; 
} 
]; 

在sortUsingComparator您提供了一組代碼,sort方法用它來比較數組中的對象對。該塊使用標準的typedef NSComparator,它將2個對象作爲參數並返回一個NSComparisonResult類型的值。

如果數組中的所有對象都不是字符串數組,則上面的代碼可能會崩潰。 (實際上,如果每個組件陣列的第一個元素是NSNumber,那麼它會起作用,因爲NSNumber也響應integerValue消息。)

如果您要在非常受控制的環境中使用此代碼,您可以確保您正在排序的數據是格式良好的,它應該按照書面形式工作。如果數組中的對象有可能是不同的類型或空的,或者它們的第一個元素不會響應integerValue消息,那麼您應該添加錯誤檢查代碼。

+0

非常感謝。 – Strikeforce

0

如果按字母數字排序的數組,對象@"1"將之前的任何字樣出現。請記住,上面代碼中的@"1"是一個字符串,而不是數字。

至於如何排序數組,請查看[NSArray sortedArrayUsingComparator:]和類似的方法。

相關問題