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

时间:2017-06-26 13:43:25

标签: ruby hash

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

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

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

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

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

2 个答案:

答案 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 } }