我的结构有一些属性,看起来像:
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) }
这似乎有效并且尚未找到一些不需要的结果,但它似乎并不像预期的方式那样做。还有其他(更好)的方法吗?
答案 0 :(得分:0)
哈希值永远不会告诉您值是否相等。它可以告诉你值不相等或它们可能相等。因此,如果您想使用哈希比较两个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
}
}