2

假设我有以下哈希:

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 类中,则会获得更多奖励积分。

4

1 回答 1

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
于 2009-11-12T14:22:27.697 回答