如何从Swift中的Dictionary获取特定索引的关键字?

我有一个在斯威夫特Dictionary ,我想在特定的索引获得一个关键。

 var myDict : Dictionary<String,MyClass> = Dictionary<String,MyClass>() 

我知道我可以迭代键并logging它们

 for key in myDict.keys{ NSLog("key = \(key)") } 

然而,奇怪的是,这样的事情是不可能的

 var key : String = myDict.keys[0] 

为什么?

这是因为keys返回LazyMapCollection<[Key : Value], Key> ,这是不能用一个Int下标。 处理这个问题的一个方法是将字典的startIndex按照您想要的下标整数进行推进,例如:

 let intIndex = 1 // where intIndex < myDictionary.count let index = myDictionary.startIndex.advancedBy(intIndex) // index 1 myDictionary.keys[index] 

另一个可能的解决scheme是初始化一个数组作为input,然后你可以在结果上使用整数下标:

 let firstKey = Array(myDictionary.keys)[0] // or .first 

请记住,词典本质上是无序的,所以不要指望给定索引处的键总是相同的。

下面是一个通过索引访问字典中的键和值的小扩展:

 extension Dictionary { subscript(i:Int) -> (key:Key,value:Value) { get { return self[startIndex.advancedBy(i)] } } } 

你可以迭代一个字典,并用for-in和enumerate来获取一个索引(就像其他人所说的那样,并不能保证它会按照下面的顺序排列)

 let dict = ["c": 123, "d": 045, "a": 456] for (index, entry) in enumerate(dict) { println(index) // 0 1 2 println(entry) // (d, 45) (c, 123) (a, 456) } 

如果你想先sorting

 var sortedKeysArray = sorted(dict) { $0.0 < $1.0 } println(sortedKeysArray) // [(a, 456), (c, 123), (d, 45)] var sortedValuesArray = sorted(dict) { $0.1 < $1.1 } println(sortedValuesArray) // [(d, 45), (c, 123), (a, 456)] 

然后迭代。

 for (index, entry) in enumerate(sortedKeysArray) { println(index) // 0 1 2 println(entry.0) // acd println(entry.1) // 456 123 45 } 

如果你想创build一个有序的字典,你应该看看generics。

Swift 3: Array()可以做到这一点很有用。

获取密钥:

 let index = 5 // Int Value Array(myDict)[index].key 

获得价值:

 Array(myDict)[index].value 

https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/CollectionTypes.html

如果需要使用带有数组实例的API的字典键或值,请使用键或值属性初始化新数组:

 let airportCodes = [String](airports.keys) // airportCodes is ["TYO", "LHR"] let airportNames = [String](airports.values) // airportNames is ["Tokyo", "London Heathrow"] 

这是一个使用Swift 1.2的例子

 var person = ["name":"Sean", "gender":"male"] person.keys.array[1] // "gender", get a dictionary key at specific index person.values.array[1] // "male", get a dictionary value at specific index 

SWIFT 3.第一个元素的示例

 let wordByLanguage = ["English": 5, "Spanish": 4, "Polish": 3, "Arabic": 2] if let firstLang = wordByLanguage.first?.key { print(firstLang) // English } 

Swift 3中,尝试使用此代码在给定索引处获取键值对(元组)

 extension Dictionary { subscript(i:Int) -> (key:Key,value:Value) { get { return self[index(startIndex, offsetBy: i)]; } } } 

SWIFT 4


数组词典 – > [[String:String]]

 var array_has_dictionary = [ [ "name" : "xxxx", "age" : "xxxx", "last_name":"xxx" ] [ "name" : "xxxx", "age" : "xxxx", "last_name":"xxx" ] cell.textLabel?.text = Array(array_has_dictionary[1])[1].key // Output: //age -> xxxx 

SWIFT 4中,你可以做你想做的事情:

 let dic = [1 : "First", 2 : "Second", 3 : "third"] for key in dic.keys { print(key) }