Ruby rails,如何比较两个哈希值?
Ruby on rails, How to compare two hashesh value to each other's?
我正在尝试将一个哈希值与特定每个键的另一个哈希值进行比较。
像下面一样
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"}]
我需要比较第一个散列数据中的特定键值,以便与第二个散列值的特定键进行比较。
喜欢从 file_data dept_id
比较 db_data 所有键 dept
值,如果没有得到则存储在 varaible(不同的数据存储)
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
所以如果 dept_id 存在于 db_data 的第一个循环中,它不会将数据存储到结果中。如果直到 db_data 的最后一个元素不存在,那么它将转到结果。那么存在的标志将再次重置为 false。
也许这不是 rubyist 的方式,但它可以
如果我明白了,你可以使用 Array#select:
file_data.select { |h| !db_data.map { |hh| hh['dept'] }.include? h['dept_id'] }
其中 db_data.map { |hh| hh['dept'] }
是包含键 'dept'
处的值的数组。
我正在尝试将一个哈希值与特定每个键的另一个哈希值进行比较。 像下面一样
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"}]
我需要比较第一个散列数据中的特定键值,以便与第二个散列值的特定键进行比较。
喜欢从 file_data dept_id
比较 db_data 所有键 dept
值,如果没有得到则存储在 varaible(不同的数据存储)
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
所以如果 dept_id 存在于 db_data 的第一个循环中,它不会将数据存储到结果中。如果直到 db_data 的最后一个元素不存在,那么它将转到结果。那么存在的标志将再次重置为 false。
也许这不是 rubyist 的方式,但它可以
如果我明白了,你可以使用 Array#select:
file_data.select { |h| !db_data.map { |hh| hh['dept'] }.include? h['dept_id'] }
其中 db_data.map { |hh| hh['dept'] }
是包含键 'dept'
处的值的数组。