2015-11-14 5 views
5

Когда я говорю порядок - я имею в виду порядок, который компилятор выбирает для отображения результатов, я знаю, что словарь не имеет индекса, подобного массиву.Swift - что определяет порядок коллекции словарей?

У меня есть следующий словарь:

let groups :Dictionary<String,AnyObject> = [ 
"Data": ["Save", "Restore"], 
"Load Tabs": ["Reload Tabs when selecting tab"], 
"Privacy": ["Set Passcode"], 
"About Me": ["Twitter", "LinkedIn"]] 

Но консоль показывает, что он отображается как это:

[ "Защита": ( "Установить Passcode" ), "Load Tabs" : ( "Reload Tabs при выборе вкладки" ), "Data" ( Сохранить, Восстановление ), "О себе": ( Twitter, LinkedIn )]

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

Так может кто-то прояснить это для меня, пожалуйста, чтобы я лучше понял, как это достигается? Я не пытаюсь манипулировать словарем, но пытаюсь понять, как определяется выход.

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

ответ

8

Dictionary ы действует на Hashable ключей и осуществляется с использованием hash table, часто используемым способом представления ассоциативных массивов с O(1) поиском. Таблицы хэшей обычно сортируются по целочисленному значению хеш-кода для небольших чисел пар ключ-значение (ниже порога ведра), а после этого - в порядке обратного ввода. Это означает, что вы не можете полагаться на хэш-таблицы, которые должны быть отсортированы в любом разумном или предсказуемом порядке в большинстве случаев.

Смежные вопросы