swift - 计算哈希值

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

这似乎有效并且尚未发现一些不需要的结果,但它似乎不是执行此操作的预期方法。是否有其他(更好的)方法来做到这一点?

最佳答案

哈希值永远不会告诉您值是否相等。它可以告诉您值不相等或可能相等。所以如果你想使用哈希比较两个 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/

相关文章:

swift - UIImage 在 segue 推送时返回 nil

node.js - Windows Node 中的快速文件夹散列

c# - 将代码转换为 C#?

unix - AIX 操作系统中的 MD5 哈希值

perl - 在 Perl 中,如何从散列中获取任意值?

swift - 安全区域布局指南不适用于 UITableView 的 BackgroundView

Swift 3 保存从相机拍摄的图像并在数据库中保存路径

ios - 选择 HealthKit HKActivitySummary -> "NSInvalidArgumentException", "startDateComponents: Date components require a calendar."

ios - 为什么这三个 addKeyCommand 中只有两个起作用

json - 尝试循环散列内的数组时未收到 HASH 引用错误