あなたが唯一の交差キーを気にしたときにどのように簡単にRubyでハッシュ平等をテストすることができますか?
-
19-09-2019 - |
質問
私は以下のハッシュを持って言ってます:
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
所属していません StackOverflow