2012-01-09 2 views
1

У меня есть Dico NSDictionary, содержащий такие вещи, как: { 123 = 125, =, ... 73 = }IOS, сравнить intValue из NSString в пределах NSArray

123, 125, .., 73 - NSString.

Я хотел бы иметь 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 –

ответ

1

При сортировке NSS-строк, которые представляют номера, которые вы хотите используйте опцию 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

Вы можете использовать метод keysSortedWithCompartor вашего NSDictionary, где вы можете поставить компаратор для сравнения ключей любым способом (в вашем случае, сравнив их как целые числа).

+0

что точная подпись этого метода? Я не нашел его в документации на яблоко. – Luc

Смежные вопросы