Вычесть значения в хэше из соответствующих значений в другом хэше
Я хотел бы иметь возможность вычесть два хэша и получить третий хэш в Ruby.
Два хэша выглядят так:
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
Я хотел бы иметь возможность вызывать метод на h1 следующим образом:
h1.difference(h2)
и получить этот хеш в результате:
{"Cat" => 50, "Dog" => 2, "BIRD" => -2, "Mouse" => -75}
Я хотел бы создать новый хэш с ключами из обоих хэшей, а значениями нового хэша должны быть значения ключа в первом хеше за вычетом значения этого ключа во втором хэше. Подвох в том, что мне нравится, что этот метод Hash работает независимо от случая ключей. Другими словами, я "хотел бы" Cat " сопоставить с "кошкой".
Вот что я имею до сих пор:
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
Это нормально, но, к сожалению, результат не тот, который я хочу.
Любая помощь будет оценена.