我有 2 个哈希,比方说 A,B
A: { 'key1' => [a, b], 'key2' => 'c' }
B: { 'key1' => [b, a], 'key2' => 'c' }
比较这两个哈希值的最佳方法是什么。数组内容的顺序无关紧要。所以在我的例子中,哈希 A 和 B 是相等的
最佳答案
这并不像乍看起来那么容易。
有必要考虑几个细微差别:
- 散列中的元素数量可能不匹配;
- 在两个散列中具有相同键的项目可以是不同类型。
比较通用的解决方案可以如下:
def hashes_comp(hash1, hash2)
return false if hash1.size != hash2.size
hash1.each do |key, value|
if value.class == Array
return false if hash2[key].class != Array || value.sort != hash2[key].sort
else
return false if value != hash2[key]
end
end
true
end
hash_a = {'key1' => ['a', 'b'], 'key2' => 'c'}
hash_b = {'key1' => ['b', 'a'], 'key2' => 'c'}
hash_c = {'key1' => ['a', 'c'], 'key2' => 'c'}
hash_d = {'key1' => ['a', 'b'], 'key2' => 'd'}
hash_e = {'key1' => ['a', 'b'], 'key2' => ['a', 'b']}
hash_f = {'key1' => ['a', 'b'], 'key2' => 'c', 'key3' => 'd'}
hashes_comp(hash_a, hash_b) #=> true
hashes_comp(hash_a, hash_c) #=> false
hashes_comp(hash_a, hash_d) #=> false
hashes_comp(hash_a, hash_e) #=> false
hashes_comp(hash_a, hash_f) #=> false
关于ruby - 将 2 个 Hash 与由数组组成的值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718887/