【发布时间】:2020-11-18 17:34:18
【问题描述】:
在 Swift 中是否可以在没有随机化的情况下对结构进行哈希处理?
struct Kiwi: Hashable {
let userId: String
let selections: Set<Int>
init(userId: String, selections: Set<Int>) {
self.userId = userId
self.selections = selections
}
func hash(into hasher: inout Hasher) {
hasher.combine(userId)
hasher.combine(selections)
}
}
let k1 = Kiwi(userId: "u1", selections: [1])
print(k1.hashValue)
let k2 = Kiwi(userId: "u1", selections: [1])
print(k2.hashValue)
不保证这些哈希值在不同的执行点上是相等的(由于哈希函数的随机化)。此哈希的目的只是生成结构值的签名,以便在结构的值相同时它们始终相同,无论何时执行。
目前,我已经创建了结构 Equatable 并仅比较结构实例,但更希望能够比较“签名”(即哈希)。
【问题讨论】: