gpt4 book ai didi

Swift:是否有比 "\(array)"更快的散列 Ints 数组的方法

转载 作者:搜寻专家 更新时间:2023-11-01 06:32:12 27 4
gpt4 key购买 nike

我想实现一个 Dictionary,其中的键是 String 类型。

String 键是通过逐字连接 Int 数组(它基本上是一个地址)生成的。

即地址 [0, 10, 32] 的哈希值将是“01032”。

值永远不会超过 255——事实上我可以使用 [UInt8]

我在 XCode 中做了一些测试并获得了不错的性能。 0.036 秒:

func testPerformance() {
let address = [10, 176, 12] //should become "1017612"
self.measure {
for _ in 0..<10_000 {
let key = "\(address[0])\(address[1])\(address[2])"
}
}
}

我的问题:是否有更轻量级的 String 类型或方法可以比这更快地完成我想要的操作?据我了解,Swift 的 String 类非常重量级,下面添加了各种字符信息:

https://medium.com/@tonyallevato/strings-characters-and-performance-in-swift-a-deep-dive-b7b5bde58d53

最佳答案

我不明白为什么您首先要承担制作字符串的所有开销。你的 Int 很小,所以为什么不计算一个唯一的 Int 作为键:

let address = [10, 176, 12]
let key = address[0] * 255 * 255 + address[1] * 255 + address[2]

这是非常快的和自散列的,并且可以很容易地通过规则提取原始组件。

或者,您可以使用包含三个 Int 属性的自定义结构,您已经在其上实现了 Hashable(通过相同的规则)和 Equatable(通过明显的规则)。

关于Swift:是否有比 "\(array)"更快的散列 Ints 数组的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com