Swift's Dictionary
- это структура данных, основанная на хеше. Если конкретный механизм упорядочения не находится в месте, порядок элементов в хэш-структур на основе, зависит от нескольких факторов:
- хэш-значения объектов, используемых в качестве ключей -
hashValue
метод используется для определения количества ковша для пункт
- размера структуры - так как
hashValue
может быть значительно больше, чем количество ковшей доступных, ограничивающий механизм, например, по модулю подсчета ковша, используется для определения фактического количества ковша
- Модификация заказ - это становится актуальным, когда ключи имеют коллизии. Элементы с повторяющимся значением хэша, расположенным позже, либо переходят в другое ведро, либо помещаются в список, связанный с фактическим ведром.
Например, если изменить размер словаря в вашем втором примере, порядок элементов будет обратным:
var test1 = [String:String]() // Use default initial capacity
test1["Tomorrow"] = "Bla"
test1["One Month"] = "Bla"
print(test1) // ["One Month": "Bla", "Tomorrow": "Bla"]
var test2 = [String:String](minimumCapacity: 11) // Use specific capacity
test2["Tomorrow"] = "Bla"
test2["One Month"] = "Bla"
print(test2) // ["Tomorrow": "Bla", "One Month": "Bla"]
Поскольку некоторые из этих параметров находятся вне вашего контроля, порядок элементов в a Dictionary
можно считать произвольным для всех практических целей.
словари не заказываются, порядок, который вы * видите * имеет ** абсолютно никакого значения ** .. – luk2302
Уже спрашивали тысячу раз, пожалуйста, исследуйте, прежде чем спрашивать. Словари не упорядочены. – Moritz
@ luk2302 и @EricD - вы оба должны быть более конкретными. На самом деле, есть _ordered_ ассоциативные контейнеры и _unordered_ ассоциативные контейнеры. Это просто внутренняя реализация (через хэш-таблицы), которая делает Swift 'Dictionary' и Objective-C' NSDictionary' неупорядоченным контейнером. – CouchDeveloper