如何从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
如果需要使用带有数组实例的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) }