ios - "Preloading"Swift 中带键的字典

标签 ios arrays swift dictionary

这是一个相当简单的问题,但我想解决这个问题,因为它可能有助于提高性能。

我想知道 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/

相关文章:

swift - 是否有调用函数的 SKAction?

ios - 在 Swift 中使用深度链接打开其他应用程序

iphone - 透明UIImage

java - 寻峰算法错误

python - Numpy:就地操作和显式操作的奇怪不同行为

swift - 如何创建事件指示器 View ?

ios - 在哪里可以找到有关 swift alert (UIAlertController) 的明确解释?

ios - 关闭应用程序后禁用 UILocalNotifications

ios - 无法将 UIScrollView 添加到 View 的一部分

c - 如何将数组数据包设为私有(private)并在 C 中访问它们