微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ruby on rails,如何将两个哈希值相互比较?

如何解决Ruby on rails,如何将两个哈希值相互比较?

我正在尝试将一个哈希值与特定每个键的另一个哈希值进行比较。 如下图

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

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

我需要比较第一个哈希数据中的特定值键,以与每个值的第二个哈希特定键进行比较。 就像从 file_data dept_id 与 db_data 所有键 dept 值进行比较,如果没有得到,则存储在变量中(不同的数据存储)

解决方法

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","div_type"=>"AB"}
# because dept_id 0020 is not existed in db_data,so it will go to result

因此,如果 db_data 的第一个循环中存在 dept_id,则不会将数据存储到结果中。如果直到 db_data 的最后一个元素不存在,那么它将转到结果。那么存在的标志将再次重置为false。

也许这不是 ruby​​ist 的方式,但可以

,

如果我明白了,你可以使用Array#select

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

其中 db_data.map { |hh| hh['dept'] } 是包含键 'dept' 处的值的数组。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。