首页 > 解决方案 > Ruby遍历两个对象并检查两个对象中是否存在某些东西

问题描述

我有两个对象:网关和消息我想检查网关中每个网关的contact_id是否等于消息中每条消息中的contact_id:如果contact_ids相等,我想使用网关对象中的另一个字段,否则继续;我考虑过做类似的事情:

for gateway in gateways
  for message in messages
    if gateway.contact_id == message.contact_id 
      someRandomArray.push(gateway.files)
    end
  end
end

但是有没有比双 for 循环更好的方法,它看起来是错误的。也许有地图或选择的东西?无论我尝试多少,都无法弄清楚这一点。

标签: ruby-on-railsrubyruby-on-rails-4

解决方案


您可以将所有消息联系人 ID 保存在一个集合中,然后遍历网关以检查网关的联系人 ID 是否在该集合中

all_message_contact_ids = Set.new messages.map {|message| message.contact_id}
gateways.each do |gateway|
  if all_message_contact_ids.include? gateway.contact_id
    someRandomArray.push(gateway.files)
  end
end

推荐阅读