【问题标题】:Filter array of hashes and modify duplicates in Ruby在 Ruby 中过滤哈希数组并修改重复项
【发布时间】:2022-01-21 16:39:00
【问题描述】:

我想根据某些内容条件过滤 Ruby 中的 params[] 哈希数组。 我看过其他一些讨论,但需求不同。

我的数组示例:

{"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"Grand Vin", "optimized_country_id"=>"1", "season_id"=>"a9840059-cc91-47aa-9098-4bf8a45655e7", "verified_status"=>"1"}
{"id"=>"8ee93dc5-abd3-4cdd-ad20-29fcf1168a66", "optimized_nickname"=>"Grand Vin 2", "optimized_country_id"=>"1", "season_id"=>"8ee93dc5-abd3-4cdd-ad20-29fcf1168a66", "verified_status"=>"1"}
{"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"Grand Vin 3", "optimized_country_id"=>"1", "season_id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "verified_status"=>"1"}
{"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"Grand Vin", "optimized_country_id"=>"1", "season_id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "verified_status"=>"1"}

过滤条件:

  • id 字段与另一个哈希相同时

  • optimized_nicknameoptimized_country_id 字段的值不同

  • 不要触摸响应这两个条件的第一个哈希

  • 根据这两个条件修改所有其他哈希值:将它们的 verified_status 字段设置为 0,除非之前的哈希值已经有 verified_status=0

我想为这个用例获得什么:

{"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"Grand Vin", "optimized_country_id"=>"1", "season_id"=>"a9840059-cc91-47aa-9098-4bf8a45655e7", "verified_status"=>"1"}
{"id"=>"8ee93dc5-abd3-4cdd-ad20-29fcf1168a66", "optimized_nickname"=>"Grand Vin 2", "optimized_country_id"=>"1", "season_id"=>"8ee93dc5-abd3-4cdd-ad20-29fcf1168a66", "verified_status"=>"1"}
{"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"Grand Vin 3", "optimized_country_id"=>"1", "season_id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "verified_status"=>"0"}
{"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"Grand Vin", "optimized_country_id"=>"1", "season_id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "verified_status"=>"1"}

在第三个散列中,verified_status 字段已设置为 0,因为它的值与第一个散列不同(因为它们具有相同的 id)。

我想我需要使用 .map 或 .select,但不知道如何检查值。 谢谢。

【问题讨论】:

  • 您是否将第一条记录与第二条进行比较,然后将第二条与第三条等进行比较?或者您有来自params 之外的一条记录,并将其与来自params 的所有记录进行比较?
  • 我想一对一比较uniq params数组上的记录。
  • "...并且字段 optimize_nickname 和 optimize_country_id 具有不同的值"。您的意思是“optimized_nickname 还是 optimize_country_id”?
  • 是的,迈克尔。如果这 2 个中至少有 1 个与其他具有相同 id 的哈希不同。
  • 您至少需要使用一些示例代码来分解您的问题,这些示例代码显示了您尝试表示的逻辑。即使它不是整个哈希,您也确实需要展示您尝试过的内容以及任何错误或不正确的输出,以说明为什么这对您不起作用。 idownvotedbecau.se/nocode

标签: arrays ruby filter hash


【解决方案1】:

如果您的哈希值位于名为“list”的数组中,您可以简单地扫描数组并按 id 收集项目,以比较和更新后续项目。

first_items_by_id = Hash.new

list.each do |item|
    prev = first_items_by_id[item["id"]]
    item["verified_status"] = "0" if prev and ((item["optimized_nickname"] != prev["optimized_nickname"]) || (item["optimized_country_id"] != prev["optimized_country_id"]))
    first_items_by_id[item["id"]] = item if prev.nil?
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-18
    • 2013-09-26
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2017-08-16
    相关资源
    最近更新 更多