Мне нужно сравнить 2 хэша в рубине, где один из хеш содержит числовые значения в кавычной строке, что делает эту строку. Рассмотрим следующие 2 хэшей:сравнить два хэша в рубине
hash1 = {"A"=>"0", "B"=>"1", "SVHTID"=>"VH", "D"=>"0", "E"=>"19930730", "F"=>"TEST - DEPOSIT", "G"=>"2.25000000"}
hash2 = {"a"=>"0", "b"=>1, "c"=>"VH", "d"=>0,"e"=>19930730, "f"=>"TEST - DEPOSIT", "g"=>2.25}
Теперь код я написал до сих пор выглядит следующим образом:
hash2 = Hash[hash2.map {|key, value| [key.upcase, value] }]
hash1.each{|k,v| hash1[k] = hash1[k].to_i if hash1[k].match(/-?\d+(?:\.\d+)?/)}
hash1.keys.select { |key| hash1[key] != hash2[key] }.each { |key|
puts "expected #{key} => #{hash1[key]}, but found #{key} => #{hash2[key]}"
}
что делает то, что он также преобразует значение с плавающей точкой в целое и оригинальное значение потерял.
Что я хочу, что при сравнении выше 2 хэш на выходе должен содержать только G, как несоответствующий тип и следующие должны быть напечатано:
Expected: G=>2.25000000 but found G=>2.25
Каким должен быть результат, когда хэш содержит тот же символ, что и нижний, и верхний регистр? – Dutow