说我有以下哈希:
hash_x = {
:a => 1,
:b => 2
}
hash_y = {
:b => 2,
:c => 3
}
我需要一大块逻辑来比较两者的相等性,只考虑交叉键。
在这个例子中,'b'键是两个哈希值之间的唯一共性,并且它的值在两者中都设置为'2',因此通过该逻辑,这两个哈希值将被认为是相等的。
同样,由于'd'键的不等式,这两个哈希值不相等('a'和'c'键值被忽略,因为它们对于它们各自的哈希值是唯一的):
hash_p = {
:a => 1,
:b => 2,
:d => 3,
}
hash_q = {
:b => 2,
:c => 3,
:d => 4
}
Ruby中是否有一个聪明的单行程序可以计算两个哈希的交叉键,然后根据这些键比较它们的相等值?
如果您提供测试,奖励积分。
如果你将其修补到Hash类中,可以获得更多奖励。
答案 0 :(得分:9)
def compare_intersecting_keys(a, b)
(a.keys & b.keys).all? {|k| a[k] == b[k]}
end
像这样使用:
compare_intersecting_keys(hash_x, hash_y) # => true
compare_intersecting_keys(hash_p, hash_q) # => false
如果你想要猴子修补:
class Hash
def compare_intersection(other)
(self.keys & other.keys).all? {|k| self[k] == other[k]}
end
end