ruby-on-rails - 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 循环更好的方法,它看起来是错误的。也许有地图或选择的东西?无论我尝试多少,都无法弄清楚这一点。
解决方案
您可以将所有消息联系人 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
推荐阅读
- r - 使用 gganimate 时小提琴图的定位
- python - 如何在 django 的表单中检索以前输入的数据?
- angular - 迁移 rxjs 5 到 6 个问题
- c# - 在存储过程 asp.net MVC 上获取产品
- azure - 将带有引用的 json 作为单个对象返回?
- java - 打包在可执行 jar 中的可写数据库
- java - 如何删除列表中的重复对象
不使用任何集合和循环 - javascript - 单选按钮 HTML - materlizeCSS
- python-3.x - Python Pandas:将特定行的几列从一个数据帧复制到另一个具有不同名称的数据帧
- javascript - 将 then 附加到调用堆栈中的多层承诺的最佳解决方案是什么?