我的结构有一些属性,看起来像:
struct Foo {
var number1: Int
var number2: Int
var number3: Int
// Has a lot more numbers and other properties
var numbers: Int { return number1.hashValue ^ number2.hashValue ^ number3.hashValue }
}
当我将 Foo 的某些实例与 instance1.numbers == instance2.numbers
进行比较时,它太不可靠了,因为它可能返回也可能不返回 true/false
。所以我通过在返回之前将每个数字乘以一个数字来修复它:
var numbers: Int { return (100 * number1.hashValue) ^ (200 * number2.hashValue) ^ (300 * number3.hashValue) }
这似乎有效并且尚未发现一些不需要的结果,但它似乎不是执行此操作的预期方法。是否有其他(更好的)方法来做到这一点?
最佳答案
哈希值永远不会告诉您值是否相等。它可以告诉您值不相等或可能相等。所以如果你想使用哈希比较两个 Foo
实例,你必须像这样执行它:
struct Foo {
var number1: Int
var number2: Int
var number3: Int
// Has a lot more numbers and other properties
var numbers: Int { return number1.hashValue ^ number2.hashValue ^ number3.hashValue }
}
func ==(lhs:Foo,rhs:Foo)->Bool{
if lhs.numbers==rhs.numbers{
return lhs.number1==rhs.number1 && lhs.number2==rhs.number2 && lhs.number3==rhs.number3
}else{
return false
}
}
关于swift - 计算哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35503368/