Порядку ключа NSDictionary гарантируют то же, как инициализировано, если это никогда не будет изменяться?

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

6
задан Community 23 May 2017 в 12:32
поделиться

4 ответа

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

8
ответ дан 8 December 2019 в 05:54
поделиться

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

7
ответ дан 8 December 2019 в 05:54
поделиться

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

Внутри NSDictionary используется хеш-таблица .

From allKeys description :

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

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

4
ответ дан 8 December 2019 в 05:54
поделиться

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

3
ответ дан 8 December 2019 в 05:54
поделиться