我喜欢哈希
h = {1 => {"inner" => 45},2 => {"inner" => 46},"inner" => 47}
如何删除包含“内部”键的每一对?
您可以看到一些“内部”对直接出现在h中,而其他对出现在h中
请注意,我只想删除“内部”对,所以如果我在上面的哈希上调用我的批量删除方法,我应该得到
h = {1 => {},2 => {}}
由于这些对没有键==“内在”
解决方法
def f x x.inject({}) do |m,(k,v)| v = f v if v.is_a? Hash # note,arbitrarily recursive m[k] = v unless k == 'inner' m end end p f h
更新:略有改进……
def f x x.is_a?(Hash) ? x.inject({}) do |m,v)| m[k] = f v unless k == 'inner' m end : x end