我正在尝试更新一个多维散列,然后将新散列与旧散列进行比较,但是无论我更改什么值,它们仍然显示为相等。有没有一种有效的方法可以比较两个散列中的每个值,如果一个不正确,则返回false
hash1 = {foo: {bar: "baz"}}
hash2 = hash1
hash2[:foo][:bar] = "foz"
hash2 == hash1 # This should be false but is returning true
答案 0 :(得分:0)
与分配给简单的原始对象(如整数)不同,将变量分配给哈希时,它将指向同一哈希对象。
因此,hash2
指向内存中与hash1
相同的对象。
如果您需要它们在结构上相同但是不同的对象,则需要深度复制第一个哈希。
def deep_copy(hash)
Marshal.load(Marshal.dump(hash))
end
hash1 = {foo: {bar: "baz"}}
hash2 = deep_copy(hash1)
hash2[:foo][:bar] = "foz"
hash2 == hash1