这是一个相当简单的问题,但我想解决这个问题,因为它可能有助于提高性能。
我想知道 Swift 是否有办法创建字典,仅指定键,可能不指定值,或者在每个条目中设置单个值。
换句话说,我想创建一个 Dictionary 对象,并“预加载”它的键。由于这是 Swift,因此值可以是 0 或 nil(或任何默认为空的值)。
这样做的原因是,我可以避免两次循环,一次循环,用键和空值填充字典,第二次循环,然后设置这些值(有一个实际的原因想要这有点超出了这个问题的范围)。
这是我的想法:
func gimme_a_new_dictionary(_ inKeyArray:[Int]) -> [Int:Int] {
var ret:[Int:Int] = [:]
for key in inKeyArray {
ret[key] = 0
}
return ret
}
let test1 = gimme_a_new_dictionary([4,6,1,3,0,1000])
但我想知道是否有一种更快的方法来完成同样的事情(如“语言构造”方式 - 我可能会找到一种更快的方法来在函数中执行此操作)。
更新:第一个解决方案几乎有效。它在 Mac/iOS 上运行良好。然而,Linux版本的Swift 3似乎没有uniqueKeysWithValues初始化程序,这很烦人。
func gimme_a_new_dictionary(_ inKeyArray:[Int]) -> [Int:Int] {
return Dictionary<Int,Int>(uniqueKeysWithValues: inKeyArray.map {($0, 0)})
}
let test1 = gimme_a_new_dictionary([4,6,1,3,0,1000])
最佳答案
对于 Swift 4,您可以使用接受序列的字典构造函数,并使用 map
从键数组创建元组序列:
let dict = Dictionary(uniqueKeysWithValues: [4,6,1,3,0,1000].map {($0, 0)})
关于ios - "Preloading"Swift 中带键的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47110587/