【问题标题】:How to iterate over two arrays and delete matching values如何遍历两个数组并删除匹配的值
【发布时间】:2023-03-10 16:50:01
【问题描述】:

我正在尝试在我的 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>]

最后,我的数组不应该有 issue_id5023143896 的对象。

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

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

【问题讨论】:

    标签: ruby-on-rails arrays ruby


    【解决方案1】:

    您可以使用map 将数组转换为issue_ids 的数组:

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

    【讨论】:

    • @Godzilla74,你问的是什么?
    • 完全...就像一个魅力...可以在几分钟内标记它。
    • 可能不值得,这也可能意味着循环遍历许多相同的排除 ID,您可以这样做 exclude_array.map(&amp;:issue_id).uniq 但可能过度优化
    猜你喜欢
    • 2018-02-13
    • 2017-12-16
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2021-03-01
    相关资源
    最近更新 更多