Ruby on rails, How to compare two hashesh value to each other's?

85 Views Asked by At

I am trying compare one hash values to another hash values of perticular each key's. like below as

db_data = [{"user_id"=>"000879", "dept"=>"1066", "type"=>"A", "rate"=>"999"},
          {"user_id"=>"000879", "dept"=>"1066","type"=>"AB", "rate"=>"999"},
          {"user_id"=>"008118", "dept"=>"10000869", "type"=>"A", "rate"=>"950"}]

file_data = [{"user"=>"00094967",  "dept_id"=>"0020",  "price"=>950, "div_type"=>"A"},
            {"user"=>"00094967", "dept_id"=>"0020",  "price"=>950, "div_type"=>"A"},
            {"user"=>"00094967",  "dept_id"=>"0020", "price"=>950, "div_type"=>"AB"}]

I need to compare specific key of value from first hash data to compare with second hash specific key of value to each. like from file_data dept_id compare to db_data all keys dept value and if not getting then store in varaible(different data store)

2

There are 2 best solutions below

1
On BEST ANSWER
results = []
existed = false
file_data.each do |fd|
  dept_id = fd['dept_id']
  db_data.each do |dd|
    if dept_id == dd['dept']
      existed = true
      break
    end
  end
  results << fd if existed == false

  existed = false
end

# {"user"=>"00094967", "dept_id"=>"0020", "price"=>950, "div_type"=>"A"}
# {"user"=>"00094967", "dept_id"=>"0020", "price"=>950, "div_type"=>"A"}
# {"user"=>"00094967", "dept_id"=>"0020", "price"=>950, "div_type"=>"AB"}
# because dept_id 0020 is not existed in db_data, so it will go to result

so if dept_id is existed in the first loop on db_data it will not store the data to result. if until last element of db_data is not existed then it will go to result. then the flag existed will reset to false again.

Maybe that is not rubyist way, but it will do

1
On

If I got the point, you could just use Array#select:

file_data.select { |h| !db_data.map { |hh| hh['dept'] }.include? h['dept_id'] }

Where db_data.map { |hh| hh['dept'] } is an array containing the values at key 'dept'.