2016-04-28 112 views
0

我想在我的Ruby on Rails程序中迭代两个数组,并创建一个不应该排除的对象的新数组。如何遍历两个数组并删除匹配值

这里是我的对象数组,我需要遍历:

[#<Result id: 1437, network_host_test_id: 1320, issue_id: 50231, created_at: "2016-04-14 19:30:22", updated_at: "2016-04-27 18:08:00", deleted_at: nil>, 
#<Result id: 1438, network_host_test_id: 1320, issue_id: 47573, created_at: "2016-04-14 19:30:22", updated_at: "2016-04-14 19:30:22", deleted_at: nil>, 
#<Result id: 1439, network_host_test_id: 1320, issue_id: 39758, created_at: "2016-04-14 19:30:22", updated_at: "2016-04-14 19:30:22", deleted_at: nil>, 
#<Result id: 1441, network_host_test_id: 1320, issue_id: 47574, created_at: "2016-04-14 19:30:22", updated_at: "2016-04-14 19:30:22", deleted_at: nil>, 
#<Result id: 1442, network_host_test_id: 1320, issue_id: 50442, created_at: "2016-04-14 19:30:22", updated_at: "2016-04-14 19:30:22", deleted_at: nil>, 
#<Result id: 1443, network_host_test_id: 1320, issue_id: 40991, created_at: "2016-04-14 19:30:22", updated_at: "2016-04-14 19:30:22", deleted_at: nil>, 
#<Result id: 1444, network_host_test_id: 1320, issue_id: 43896, created_at: "2016-04-14 19:30:22", updated_at: "2016-04-14 19:30:22", deleted_at: nil>] 

我排除数组是:

[#<DeferredIssue id: 1, defer_reason: "Test for issue", defer_name: "JF", issue_id: 50231, created_at: "2016-04-28 17:50:37", updated_at: "2016-04-28 17:50:37", network_host_id: 76>, 
#<DeferredIssue id: 2, defer_reason: "Defer a 10", defer_name: "Travis", issue_id: 43896, created_at: "2016-04-28 17:51:25", updated_at: "2016-04-28 17:51:25", network_host_id: 76>] 

到最后,我的数组不应该有50231issue_id对象或43896

我最初使用exclude?对此进行了测试,但我的排除阵列仅为[50231, 43896]。既然它们是对象,那么这种类型的迭代就不起作用。

什么是Ruby方式来做这种事情?

回答

4

您可以map改变你的阵列的issue_ids数组:

ids = exclude_array.map(&:issue_id) 
#=> [50231, 43896] 
your_objects.select {|o| ids.exclude?(o.issue_id) } 
+0

男人,我真的需要'.map'更多的工作。 – Godzilla74

+0

@ Godzilla74,你问什么? – Ilya

+0

完全......像魅力一样工作......可以在几分钟内标记出来。 – Godzilla74

相关问题