2015-12-22 3 views
0

У меня есть этот простой код:быстрого возвращение неправильного индекса словаря

var dic = [25:"first" , 35 : "second" , 55 : "third"] 
let firstKey = Array(dic.keys)[0] // or .first 
print (firstKey) 

Я предполагаю, что это, предполагает, чтобы вернуть 25, потому что первый ключ в первом индексе словаря, если 25 .О странно это возвращением 35.

Что случилось?

Благодаря

+5

Это нормально, это не упорядоченный набор данных.http: // stackoverflow.com/questions/1295459/are-keys-and-values-in-an-nsdictionary-ordered –

+2

Словари представляют собой неупорядоченное представление ключа. Поэтому нормально не печатать первое значение словаря. – ridvankucuk

+0

Чего вы хотите достичь. вы сначала знаете основную разницу между словарем и массивом и упорядоченным dic – Spynet

ответ

0

Попробуйте

let firstKey = Array(dic.keys).sort()[0] 
+0

Я не хочу менять индексы. Я хочу ключ и значение по конкретному индексу. Разве ваш код не возился с индексами? – sali

+0

@sali вы нет нет * есть * индексы в первую очередь. – luk2302

0

От Swift Doc:

словарь

хэширования на основе сопоставления с ключом к экземплярам Value. Также не набор пар ключ-значение с не определено заказа

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

0

У вас, похоже, есть предположение, что словарь заказан, это не так. См. Раздел Collection Types руководства по быстрому программированию. Что это значит? Это означает, что нет нет гарантии, что значения или ключи хранятся в том порядке, в котором вы их создаете. Единственная гарантия, которую вы имеете, это то, что доступ к значению по ключу будет возвращать это значение.

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

Если вы посмотрите на Swift Standard Library Reference, он документирует, какие методы мы можем использовать в словаре.

У вас есть следующие свойства и функции для работы со индексами со словарями.

Свойства:

startIndex 
endIndex 

Функции

func indexForKey(_ key: Key) -> DictionaryIndex<Key, Value>? 
func removeAtIndex(_ index: DictionaryIndex<Key, Value>) -> (Key, Value) 

Словари также соответствуют indexable protocol.

Типы Коллекция

Swift обеспечивает три основных типа коллекции, известные , как массивы, множество и словари, для хранения коллекций значений. Массивы представляют собой упорядоченные коллекции значений. Наборы неупорядочены коллекции уникальных значений. Словари - это неупорядоченные коллекции ассоциаций с ключом.

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