有什么方法可以知道Swift如何计算hashValue?

时间:2018-09-08 04:18:21

标签: swift hash

我最近发现下面的代码以哈希冲突结尾。

仅供参考,我使用的是XCode 9.4.1(9F2000),该版本使用的是Swift 4.1.2

import Foundation

let lhs = "あいうえおあいう21あいうえ"
let rhs = "あいうえおあいう22あいうえ"
let percentEncodedLhs = lhs.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!
let percentEncodedRhs = rhs.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!

let lhsHashValue = lhs.hashValue
let rhsHashValue = rhs.hashValue
let lhsPercentHashValue = percentEncodedLhs.hashValue
let rhsPercentHashValue = percentEncodedRhs.hashValue

print(lhsHashValue == rhsHashValue)
print(lhsPercentHashValue == rhsPercentHashValue)

/*
 Output:

 false
 true
 */

我知道在某些情况下可能发生哈希冲突,但是我找不到 Swift如何计算String的hashValue

例如,Java计算String的hashCode如下: https://docs.oracle.com/javase/6/docs/api/java/lang/String.html#hashCode()

是否有任何官方解释或某些假设?

1 个答案:

答案 0 :(得分:1)

  

但是我找不到Swift如何计算String的hashValue

为什么不呢? Swift是开源的。如果您有兴趣,请阅读源。

https://github.com/apple/swift/blob/111499d2bfc58dc12fcb9cd1ce1dda7978c995b7/stdlib/public/core/StringHashable.swift