あなたが唯一の交差キーを気にしたときにどのように簡単にRubyでハッシュ平等をテストすることができますか?

StackOverflow https://stackoverflow.com/questions/1722421

質問

私は以下のハッシュを持って言ってます:

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
}

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

あなたがテストを提供する場合、

ボーナスポイント。

その他のボーナスポイントあなたはハッシュクラスにそれを猿パッチます。

役に立ちましたか?

解決

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top