Compare hashes and report where the change was


I would like to compare two hashes, for example:

array1 = [{'id' => 124, 'name' => 'Kamal', 'job' => 'manager'},
{'id' => 314, 'name' => 'John', 'job' => 'developer'}]
array2 = [{'id' => 124, 'name' => 'Kamal', 'job' => 'managerZ'},
{'id' => 314, 'name' => 'JohnDD', 'job' => 'developer'}]

the id is not always ‘id’ , it could be UserID or EmployeeID or else

I want to have :

def compare_rows(array1,array2,id)


I want to report:

  • row with UserID equal 124, job changed from ‘manager’ to ‘managerZ’
  • row with UserID equal 314, name changed from ‘John’ to ‘JohnDD’

If you want to get what is the difference between two hashes, you can do this:

result = {}
hash1.each {|key, value| result[key] = hash2[key] if hash2[key] != value }
puts result

or use a this hash1.to_a == hash2.to_a turning it to an array and compairing those. or you could use to_s compare strings.