Ruby 遍历两个对象并检查两个对象中是否存在某些内容
Ruby looping through two objects and checking if something is present in both objects
我有两个对象:网关和消息
我想检查 gateways 中每个网关的 contact_id 是否等于 messages 中每条消息中的 contact_id:如果 contact_id 相等,我想在网关对象否则继续;
我考虑过做类似的事情:
for gateway in gateways
for message in messages
if gateway.contact_id == message.contact_id
someRandomArray.push(gateway.files)
end
end
end
但是有没有比双 for 循环更好的方法,它看起来不对。也许有地图或 select?不管我怎么努力都弄不明白。
您可以将所有消息联系人 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
你可以这样做:
message_contact_ids = messages.map(&:contact_id)
selected_gateways = gateways.select{ |gw| gw.contact_id.in?(message_contact_ids) }
然后你可以使用selected_gateways
调用任何你喜欢的字段。
我有两个对象:网关和消息 我想检查 gateways 中每个网关的 contact_id 是否等于 messages 中每条消息中的 contact_id:如果 contact_id 相等,我想在网关对象否则继续; 我考虑过做类似的事情:
for gateway in gateways
for message in messages
if gateway.contact_id == message.contact_id
someRandomArray.push(gateway.files)
end
end
end
但是有没有比双 for 循环更好的方法,它看起来不对。也许有地图或 select?不管我怎么努力都弄不明白。
您可以将所有消息联系人 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
你可以这样做:
message_contact_ids = messages.map(&:contact_id)
selected_gateways = gateways.select{ |gw| gw.contact_id.in?(message_contact_ids) }
然后你可以使用selected_gateways
调用任何你喜欢的字段。