2017-06-26 72 views
0

在Ruby中我有一個二維哈希。在Ruby中從嵌套哈希中刪除元素

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

我想刪除從散列,其中值1(v1)爲0,例如那些元素,所以我的結果將是:

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

我想通過迭代來實現這一通過散列與delete_if,但我不知道如何處理與它嵌套的部分。

回答

3

這是你在找什麼?

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

由於@TomLord說,這也可能是變型,當v1可以沒有定義或等於nil,在這種情況下,這將是更好地使用v['v1'] == 0

+2

將嵌套的哈希總是包含一個''v1''鍵,將它ALWA ys映射到'Numeric'對象?如果不是,使用'== 0'而不是'.zero?'會更安全。 –

+0

@TomLord當然,你的權利 –

1

中您可以使用您的Hash#value?塊檢查嵌套哈希值的任何等於0

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

OP似乎只關心子哈希中的'v1',所以如果'v1 == 1'和'v2 == 0'那麼這個解決方案是不準確的 – engineersmnky

+0

@engineersmnky真的,我只是添加了一些解釋。我會留下答案,因爲OP仍然可以找到它的用處。 –