2016-04-28 114 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

相關問題