gpt4 book ai didi

swift - 使用按位异或运算符将哈希值相加或简单地将它们相加

转载 作者:搜寻专家 更新时间:2023-11-01 07:27:32 25 4
gpt4 key购买 nike

我想使用以下方法为我的类中的几个属性创建一个唯一标识符:

class Foo {
var name = "John"
var array = ["string1", "string2"]

var check: Bool { return name.isEmpty }

var xor: Int { return name.hashValue ^ check.hashValue }
var add: Int { return name.hashValue + check.hashValue }
}

let test = Foo()

print(test.xor) // prints 4799450059756749538
print(test.add) // prints 4799450059756749538

工作没有问题。

但是在阅读一些教程时,一些网站使用运算符 ^ 将哈希值“相加”。

我的问题是,如果我使用运算符 ^ 来计算 identifier 是否会产生任何(负面)影响?因为当我计算数组的哈希值时,我不能使用运算符 + 而我不得不使用 ^ 代替(除非我使用 Int32/Int64 代替):

var identifier: Int { return name.hashValue ^ array.map { $0.hashValue }.reduce(0) { $0 ^ $1 } ^ check.hashValue }

我还看到有人在处理哈希值时使用按位左右移位运算符。这有什么特别的原因吗?

最佳答案

+ 上使用 ^(按位异或)的原因是 + 可以溢出并且使您的应用崩溃。

之所以使用按位左移和右移运算符,是为了在数组顺序不同的情况下生成不同的哈希值。如果你只是 ^ 哈希值而不移动,那么 ["a", "b"]["b", "a"] 会生成相同的哈希值。

关于swift - 使用按位异或运算符将哈希值相加或简单地将它们相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34974487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com