如何在swift中从一系列键值对(元组)创建一个两个字符串数组

时间:2017-10-31 13:57:47

标签: ios dictionary key-value swift4

我有两个字符串数组,它定义如下,以便如何从一系列键值对创建字典。

let cityNames = ["Riyadh", "Mecca", "Sultanah", "Buraydah", "Al Qarah"]
let nearestDistances = [84.24, 41.37, 45.37, 57.96, 78.78]

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

只需zip将它们组合起来并将它们组合成一个循环

var dictionary = [String: Double]()

for (city, distance) in zip(cityNames, nearestDistances){
    dictionary[city] = distance
}

更好的是,你可以为它做一个很好的扩展:

extension Dictionary{
    init(keys: [Key], values: [Value]){
        self.init()
        for (key, value) in zip(keys, values){
            self[key] = value
        }
    }
}

let dictionary = Dictionary<String, Double>(keys: cityNames, values: nearestDistances)

答案 1 :(得分:1)

如前所述,自Xcode 9起, Swift标准库为这种情况提供了方便的Dictionary initializer

init<S>(uniqueKeysWithValues keysAndValues: S) 
where S: Sequence, S.Element == (Key, Value)
  

按给定顺序从键值对创建一个新词典。

如果对Swift泛型不太熟悉,这可能很难阅读;)尽管如此,用法非常简单:

let cityNames = ["Riyadh", "Mecca", "Sultanah", "Buraydah", "Al Qarah"]
let nearestDistances = [84.24, 41.37, 45.37, 57.96, 78.78]

let dict = Dictionary(uniqueKeysWithValues: zip(cityNames, nearestDistances))
print(dict)

打印:

[  
  "Buraydah": 57.96, 
  "Al Qarah": 78.78, 
  "Mecca":    41.37, 
  "Riyadh":   84.24, 
  "Sultanah": 45.37
]

最后,生成的字典类型是您所期望的:

print(type(of: dict)) // Dictionary<String, Double>