2

次のハッシュがあるとします。

hash_x = {
  :a => 1,
  :b => 2
}
hash_y = {
  :b => 2,
  :c => 3
}

交差するキーのみを考慮して、2つを比較して等しいかどうかを判断するロジックのチャンクが必要です。

この例では、'b' キーが 2 つのハッシュ間の唯一の共通点であり、その値は両方で '2' に設定されているため、そのロジックにより、これら 2 つのハッシュは等しいと見なされます。

同様に、これら 2 つのハッシュは、「d」キーが等しくないため等しくありません (「a」と「c」のキー値は、それぞれのハッシュに固有であるため無視されます)。

hash_p = {
  :a => 1,
  :b => 2,
  :d => 3,
}
hash_q = {
  :b => 2,
  :c => 3,
  :d => 4
}

Ruby には、2 つのハッシュの交差するキーを計算し、それらのキーに基づいて値が等しいかどうかを比較できる賢いワンライナーがありますか?

テストを提供するとボーナスポイント。

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 に答える