计算hashValue

时间:2016-02-19 10:44:57

标签: swift hash

我的结构有一些属性,看起来像:

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) }

这似乎有效并且尚未找到一些不需要的结果,但它似乎并不像预期的方式那样做。还有其他(更好)的方法吗?

1 个答案:

答案 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
    }
}