Subtrahieren Sie die Werte in Hash von den entsprechenden Werten in einem anderen Hash

Ich möchte in der Lage sein, zwei Hashes zu subtrahieren und einen dritten Hash in Ruby zu erhalten.

Die beiden Hashes sehen folgendermaßen aus:

h1 = {"Cat" => 100, "Dog" => 5, "Bird" => 2, "Snake" => 10}
h1.default = 0

h2 = {"cat" => 50, "dog" => 3, "BIRD" => 4, "Mouse" => 75, "Snake" => 10}
h2.default = 0

Ich möchte in der Lage sein, eine Methode auf h1 wie folgt aufzurufen:

h1.difference(h2)

und bekomme diesen Hash als Ergebnis:

{"Cat" => 50, "Dog" => 2, "BIRD" => -2, "Mouse" => -75}

Ich möchte einen neuen Hash mit Schlüsseln aus beiden Hashes und den Werten des neuen Hashs erstellen, um den Wert des Schlüssels im ersten Hash abzüglich des Werts dieses Schlüssels im zweiten Hash zu erhalten. Der Haken ist, dass ich möchte, dass diese Hash-Methode unabhängig vom Fall der Schlüssel funktioniert. Mit anderen Worten, ich möchte, dass "Katze" mit "Katze" übereinstimmt.

Folgendes habe ich bisher:

class Hash
  def difference(another_hash)
    (keys + another_hash.keys).map { |key| key.strip }.uniq.inject(Hash.new(0)) { |acc, key| acc[key] = (self[key] - another_hash[key]); acc }.delete_if { |key, value| value == 0 }
  end
end

Das ist in Ordnung, aber leider ist das Ergebnis nicht das, was ich will.

Jede Hilfe wäre dankbar.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage