【问题标题】:Delete element from nested hash in Ruby从Ruby中的嵌套哈希中删除元素
【发布时间】:2017-06-26 13:43:24
【问题描述】:

我在 Ruby 中有一个二维哈希。

h = { "a" => {"v1" => 0, "v2" => 1}, "c" => {"v1" => 2, "v2" => 3} }

我想从哈希中删除那些元素,例如值 1 (v1) 为 0,所以我的结果是:

{ "c" => {"v1" => 2, "v2" => 3} }

我想通过使用delete_if 遍历哈希来实现这一点,但我不确定如何使用它处理嵌套部分。

【问题讨论】:

    标签: ruby hash


    【解决方案1】:

    这就是你要找的吗?

    h.delete_if { |_, v| v['v1'].zero? }
    #=> {"c" => {"v1" => 2, "v2" => 3}}
    

    正如@TomLord所说,它也可能是变体,当v1不能定义或等于nil时,在这种情况下,最好使用v['v1'] == 0

    【讨论】:

    • 嵌套散列是否总是包含'v1' 键,它是否总是映射到Numeric 对象?如果没有,使用== 0 而不是.zero? 会更安全。
    【解决方案2】:

    您可以在您的区块中使用Hash#value? 来检查嵌套散列中的任何 值是否等于0

    hash.delete_if { |k,v| v.value? 0 } #=> { "c" => { "v1" => 2, "v2" => 3 } } 
    

    【讨论】:

    • OP 似乎只关心子哈希中的v1,所以如果v1 == 1v2 == 0 那么这个解决方案是不准确的
    • @engineersmnky 是的,我刚刚添加了一些解释。我会留下答案,因为 OP 可能仍然觉得它有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    相关资源
    最近更新 更多