【问题标题】:Exclude elements from a hash based on contents of nested hash?根据嵌套哈希的内容从哈希中排除元素?
【发布时间】:2022-01-14 16:33:26
【问题描述】:

我有以下 Ruby 哈希...

{
  "Aura"=>{"eyes"=>403, "moon"=>134, "burst"=>75, "psych"=>249},
  "Power: Verdure"=>{"max"=>4, "min"=>1}, 
  "Power: Creature"=>{"max"=>3, "min"=>1}, 
  "Iris"=>{"ice"=>208, "sky"=>220, "aqua"=>206, "deep"=>215, "dusk"=>229, "hide"=>213}
}

我想删除哈希具有maxmin 的任何元素。最大值/最小值无关紧要。只是它们存在的事实。

意思是上面的哈希会变成...

{
  "Aura"=>{"eyes"=>403, "moon"=>134, "burst"=>75, "psych"=>249},
  "Iris"=>{"ice"=>208, "sky"=>220, "aqua"=>206, "deep"=>215, "dusk"=>229, "hide"=>213}
}

如何删除这些元素?

【问题讨论】:

标签: ruby hash


【解决方案1】:

正如 cmets 中所建议的,这可以通过应用 Hash#rejectHash#has_key? 轻松解决。

data = {
  "Aura"=>{"eyes"=>403, "moon"=>134, "burst"=>75, "psych"=>249},
  "Power: Verdure"=>{"max"=>4, "min"=>1}, 
  "Power: Creature"=>{"max"=>3, "min"=>1}, 
  "Iris"=>{"ice"=>208, "sky"=>220, "aqua"=>206, "deep"=>215, "dusk"=>229, "hide"=>213}
}

pruned_data = data.reject { |k, v| v.has_key?("min") && v.has_key?("max") }

如果它在您的大脑中处理得更好,我们可以#select包含这两个键的散列。

pruned_data = data.select { |k, v| !(v.has_key?("min") && v.has_key?("max")) }

还有更聪明的方法,但这是一个非常简单的问题,似乎需要一个简单的解决方案。

【讨论】:

    猜你喜欢
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2016-12-31
    • 2017-03-21
    相关资源
    最近更新 更多