我在Ruby中有一个二维哈希。
h = { "a" => {"v1" => 0, "v2" => 1}, "c" => {"v1" => 2, "v2" => 3} }
我想从散列中删除这些元素,例如,值1(v1
)为0,所以我的结果是:
{ "c" => {"v1" => 2, "v2" => 3} }
我想通过使用delete_if
迭代哈希来实现这一目标,但我不确定如何使用它处理嵌套部分。
答案 0 :(得分:3)
这就是你要找的东西吗?
h.delete_if { |_, v| v['v1'].zero? }
#=> {"c" => {"v1" => 2, "v2" => 3}}
正如@TomLord所说,它也可能是变体,当v1
无法定义或等于nil
时,在这种情况下,最好使用v['v1'] == 0
答案 1 :(得分:1)
您可以在块中使用Hash#value?
来检查嵌套哈希值中的任何值是否等于0
:
hash.delete_if { |k,v| v.value? 0 } #=> { "c" => { "v1" => 2, "v2" => 3 } }