Гарантируется ли порядок ключей NSDictionary такой же, как инициализированный, если он никогда не изменяется? - PullRequest
6 голосов
/ 23 марта 2010

Я столкнулся с той же проблемой, что и обнаруженный в этом вопросе .Однако у меня есть дополнительный вопрос.Кажется, я нахожусь в той же ситуации, что и оригинальный аскер: у меня есть список с иерархией словарей, которые определяют экран конфигурации.Они не изменяемые и будут оставаться неизменными на протяжении всего приложения.Поскольку первоначальное обсуждение, похоже, сосредоточено на проблемах, возникающих в результате изменения словаря, я должен попросить подтверждение: гарантированно ли порядок словаря такой же, как в plist, то есть как он читается (с initWithContentsOfFile)?Могу ли я использовать все ключи на нем в этом случае, чтобы получить массив ключей правильного порядка, если словарь никогда не меняется?

Ответы [ 4 ]

8 голосов
/ 23 марта 2010

Нет, ключи вряд ли появятся в том же порядке, что и ваш файл plist. Я не могу заглянуть под капот, но я думаю, что ключи упорядочены любым способом, который обеспечивает эффективный поиск. В документации для allKeys сказано, что порядок элементов в массиве не определен.

7 голосов
/ 23 марта 2010

Если вам нужен NSDictionary, который поддерживает порядок, взгляните на CHDataStructure's CHOrderedDictionary, который именно это и делает. Я использую это все время.

4 голосов
/ 23 марта 2010

Я бы не предполагал, что ключи будут в любом порядке, потому что allKeys не гарантирует порядок. Внутренне, NSDictionary использует хеш-таблицу .

С allKeys описание :

Порядок элементов в массиве не определено.

Если вы хотите отобразить значения в некотором порядке, получите ключи, отсортируйте массив ключей и затем получите значение для каждого ключа.

3 голосов
/ 23 марта 2010

Ничего общего о заказе не гарантируется. Даже не гарантируется, что повторение словаря дважды даст вам ключи в том же порядке.

...