我想实现一个字典
,其中键的类型为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 类相当重量级,下面添加了各种字符信息:
最佳答案
我不明白为什么你首先要花费所有的开销来制作一个字符串。你有小的 Int,所以为什么不计算一个唯一的 Int 作为键:
let address = [10, 176, 12]
let key = address[0] * 255 * 255 + address[1] * 255 + address[2]
这是非常快速和自散列的,并且可以通过规则轻松提取原始组件。
或者,您可以使用三个 Int 属性的自定义结构,在该结构上您已经实现了 Hashable(按照相同的规则)和 Equatable(按照明显的规则)。
关于Swift:有没有比 "\(array)"更快的方法来哈希整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579823/