2012-01-09 53 views
1

內我有一個包含事像迪科的NSDictionary: { 123 =, 125 =, ... 73 = }iOS的比較的NSString的的intValue一個NSArray

123,125,..., 73是NSString。

我想有含其ID排序的對象一個NSArray:

[ <MyObject:73>, <MyObject:123>, ..., <MyObject:125> ] 

什麼是最有效的方式來做到這一點?

我用[[dico allKeys] sortedArrayUsingSelector:@selector(compare:)]以鍵排序鍵列表,但隨着按鍵的NSString他們不下令正確的方式(我可以用[42,46,5,56,...]。

+0

請參閱http://stackoverflow.com/questions/2031990/how-to-sort-an-nsarray-using-compareoptions – 2012-01-09 15:22:07

回答

1

排序時NSString的表示數字要使用NSNumericSearch選項將它們按數字排序,例如1 1000.以下是一個示例:

NSMutableDictionary* d = [NSMutableDictionary dictionaryWithCapacity:3]; 
    [d setObject:@"C" forKey:@"3"]; 
    [d setObject:@"A" forKey:@"1"]; 
    [d setObject:@"B" forKey:@"2"]; 

    NSArray* sortedKeys = [d keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
     return [obj1 compare:obj2 options:NSNumericSearch]; 
    }]; 

    NSLog(@"%@",sortedKeys); 

    NSArray* sortedObjs = [d objectsForKeys:sortedKeys notFoundMarker:[NSNull null]]; 
    NSLog(@"%@", sortedObjs); 
0
結束

你可以使用你的NSDictionary,的keysSortedWithCompartor方法,你可以提供一個比較來比較你所希望的任何方式鍵(在你的情況下,通過比較它們作爲整數)。

+0

這種方法的確切簽名是什麼?我沒有在蘋果文檔中找到它。 – Luc 2012-01-09 15:27:43