有时候需要将数组的下标和元素转换成字典。比如说使用数组元素来查找下标,如果使用一个函数来查找,那每次都得进行循环查找和获取,不论是计算性能还是内存需求都大,这时候将原数组转换成一个字典,关键字为数组元素,值为下标序号会更方便一些,这样就可以很轻松的通过元素的值来查找序号了,也就不用每次都进行循环查找。
要将数组转换为字典需要依次获取数组每个元素和其对应的下标序号。当然用一个 For 循环也可以实现这个功能,因为下标序号是用 For 循环里的i
通过i=0
和i += 1
获取到的。但是 Swift 并没有 C 风格的 For 循环,Swift 使用的 For-In 循环并不能很直接的使用获取元素下标序号,需要使用 Swift 的字符串枚举函数String.enumerate()
,或者使用 While 循环也可以做到。
下面分别介绍一下两种方法,使用的数组如下:
let str = ["a", "b", "c"]
使用 For-In 循环的方法:
//声明初始化一个空白字典,关键字为字符串,值为整数
var dist = [String: Int]()
// str.enumerated() 可以同时获取 str的index和value,这两个值的名称可以自己定义,这里为了说明所以写成index和value
for (index, value) in str.enumerated() {
dist[value] = index
}
使用 While 循环的方法:
//声明初始化一个空白字典,关键字为字符串,值为整数
var dist = [String: Int]()
var i = 0
while (i < str.count) {
dist[str[i]] = i
i += 1
}
二者的输出皆为:
["c": 2, "b": 1, "a": 0]
这样我们就可以很方便地获取某个元素的序号,比如获取字符c
的序号:
//这里使用感叹号是因为这个值不一定存在于字典,或者说原数组中,直接等于的话,得到的是可选值‘Optional’类型,使用感叹号强制为一定有,当然你可以使用问好‘?’来添加如果没有返回什么值
print(dist["c"]!)
2
希望能帮到有需要的人~