NSDictionary порядок ключей и значений
Я знаю что в NSDictionary
, нет никаких гарантий о порядке пунктов при перечислении.
Однако можно ли ожидать, что [[myDictionary allValues] objectAtIndex:index]
всегда будет соответствующее значение ключа [[myDictionary allKeys] objectAtIndex:index]
? (предположим, что словарь является неизменным).
1 ответ
Даже если есть очень хороший шанс, что эти два будут в одном и том же порядке, Apple может изменить его в любое время, потому что просто нет гарантии заказа.
Если вам нужно два NSArray
s, один с ключами и один со значениями, с "параллельными" индексами, лучшим подходом к этому было бы создание этих массивов самостоятельно путем перечисления пар ключ-значение словаря и добавления их к двум создаваемым массивам:
NSMutableArray *keys = [NSMutableArray array];
NSMutableArray *vals = [NSMutableArray vals];
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[keys addObject:key];
[vals addObject:obj];
}];
Вы также можете получить ключи отдельно, а затем получить значения в массиве с параллельной индексацией, вызвав objectsForKeys:notFoundMarker:
метод:
NSArray *keys = [dict allKeys];
// In the call below, the marker [NSNull null] will not be used, because we know
// that all keys will be present in the dictionary.
NSArray *vals = [dict objectsForKeys:keys notFoundMarker:[NSNull null]];