从Ruby中的嵌套哈希删除元素



我在Ruby中具有二维哈希。

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

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

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

我想通过用delete_if迭代hash来实现这一目标,但我不确定如何处理嵌套的部分。

是您要寻找的吗?

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

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

您可以在块中使用 Hash#value?检查嵌套哈希中值等于 0

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

最新更新