iOS сравнивает intValue NSString в NSArray - PullRequest
1 голос
/ 09 января 2012

У меня есть dico NSDictionary, содержащий такие вещи, как: {123 =, 125 =, ... 73 =}

123, 125, .., 73 - NSString.

Мне бы хотелось, чтобы NSArray содержал объекты, упорядоченные по их идентификатору:

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

Какой самый эффективный способ сделать это?

Я использовал [[dico allKeys] sortedArrayUsingSelector:@selector(compare:)], чтобы набрать список упорядоченных ключей, но поскольку ключи являются NSString, они не упорядочены правильно (я мог бы закончить с [42, 46, 5, 56. ...].

Ответы [ 2 ]

1 голос
/ 09 января 2012

При сортировке строк NSS, представляющих числа, вы хотите использовать опцию NSNumericSearch, чтобы сортировать их как числа, например, 1 <20 <100 <1000. Вот пример: </p>

    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 голосов
/ 09 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...