【发布时间】:2017-11-04 12:11:13
【问题描述】:
这是一个相当简单的问题,但我想解决一个问题,因为它可能有助于提高性能。
我想知道 Swift 是否有办法创建字典,指定 ONLY 键,可能没有值,或者在每个条目中设置一个值。
换句话说,我想创建一个 Dictionary 对象,并“预加载”它的键。由于这是 Swift,因此值可以是 0 或 nil(或默认为空的任何值)。
这样做的原因是,我可以避免两个循环,我通过一次,用键和空值填充字典,然后在第二个循环中设置这些值(有一个实际的原因想要this,这有点超出了这个问题的范围)。
以下是我的想法:
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])
【问题讨论】:
-
init(uniqueKeysWithValues:)的Dictionary初始化器确实是 Swift 4.0 的特性。 -
啊!这就是为什么!没关系,那么...
-
阅读理解。我听说过...
标签: ios arrays swift dictionary