NSDictionary allKeys - всегда ли он возвращает один и тот же порядок? - PullRequest
8 голосов
/ 06 марта 2012

Я довольно новичок в Objective-C, и сегодня я работал с NSDictionaries и столкнулся с методом allKeys. Как я понимаю, он возвращает NSArray, содержащий ключи для словаря в случайном порядке. Однако всегда ли этот порядок одинаков? то есть, если я вызову allKeys для одного и того же словаря 20 раз подряд, гарантированно ли я получу такой же порядок результатов?

Спасибо

Ответы [ 3 ]

8 голосов
/ 06 марта 2012

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

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

1 голос
/ 06 марта 2012

NSDictionary объекты неупорядочены для поддержания производительности.

Если вам нужен заказной словарь, посмотрите на этот проект:

http://code.google.com/p/cocoa-sorted-dictionary/

0 голосов
/ 06 марта 2012

Чтобы понять это, нужно написать программу быстрого тестирования. Действительно, вы никогда не должны полагаться на негарантированные, недокументированные результаты, подобные этому. Это плохая практика программирования, и вполне вероятно, что она выйдет из строя с новой версией ОС.

Если вам нужны ключи, которые возвращаются в определенном порядке, вы должны отсортировать их после получения. Вы можете сделать это с помощью группы методов -[NSArray sortedArrayUsing...].

...