我有两个对象:网关和消息,我想检查网关中每个网关的contact_id是否等于消息中的每个消息中的contact_id :如果contact_ids相等,我想在gateways对象继续使用另一个字段;我考虑这样做:
for gateway in gateways
for message in messages
if gateway.contact_id == message.contact_id
someRandomArray.push(gateway.files)
end
end
end但是,有比双for循环更好的方法吗?它看起来是错误的。也许是用地图还是选择?不管我怎么努力都找不出答案。
发布于 2021-08-05 15:32:47
可以将所有邮件联系人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发布于 2021-08-06 00:58:14
你可以这样做:
message_contact_ids = messages.map(&:contact_id)
selected_gateways = gateways.select{ |gw| gw.contact_id.in?(message_contact_ids) }然后,您可以使用selected_gateways来调用任何您喜欢的字段。
https://stackoverflow.com/questions/68669226
复制相似问题