Frage

Say Ich habe folgenden Hashes:

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

ich brauche ein Stück Logik, die die beiden für die Gleichstellung vergleicht nur unter Berücksichtigung der sich schneid Tasten.

In diesem Beispiel wird die ‚b‘ Schlüssel ist die einzige Gemeinsamkeit zwischen den beiden Hashes und sein Wert auf ‚2‘ in beiden so von dieser Logik dieser beiden Hashes würden als gleich betrachtet werden.

Ebenso diese beiden Hashes würden aufgrund der Ungleichheit des ‚d‘ Schlüssels nicht gleich sein (die ‚a‘ und ‚c‘ Schlüsselwerte ignoriert werden, da sie zu ihrem jeweiligen Hashes einzigartig sind):

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

Gibt es einen cleveren Einzeiler in Ruby, die die schneidenden Tasten der beiden Hashwerte berechnen können dann ihre Werte auf diesen Schlüsseln basierend Gleichheit vergleichen?

Bonuspunkte, wenn Sie bieten Tests.

Weitere Bonuspunkte, wenn Sie Affen-Patch in die Hash-Klasse.

War es hilfreich?

Lösung

def compare_intersecting_keys(a, b)
  (a.keys & b.keys).all? {|k| a[k] == b[k]}
end

Verwenden Sie wie folgt aus:

compare_intersecting_keys(hash_x, hash_y)  # => true
compare_intersecting_keys(hash_p, hash_q)  # => false

Wenn Sie es affen gepatcht:

class Hash
  def compare_intersection(other)
    (self.keys & other.keys).all? {|k| self[k] == other[k]}
  end
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top