如何从ruby中删除所有值。我不想只删除键值。
例如:
这是我的哈希:{'a'=>{'b'=>'c'},'d'=>'e','f'=>{'g'=>''}}
我想要这个:{'a'=>{'b'=>nil},'d'=>nil,'f'=>{'g'=>nil}}
我不想删除嵌套的哈希值。嵌套级别从一到六级不等
感谢名单
答案 0 :(得分:6)
您可以编写自定义delete_values!
方法,如下所示:
class Hash
def delete_values!
each_key do |key|
self[key].is_a?(Hash) ? self[key].delete_values! : self[key] = nil
end
end
end
{'a'=>{'b'=>'c'},'d'=>'e','f'=>{'g'=>''}}.delete_values!
# => {"a"=>{"b"=>nil}, "d"=>nil, "f"=>{"g"=>nil}}
答案 1 :(得分:2)
h = {'a'=>{'b'=>'c'},'d'=>'e','f'=>{'g'=>''}}
def clean_hash h
h.each do |key, value|
if value.instance_of? Hash
clean_hash value
else
h[key] = nil
end
end
end
clean_hash h
#{"a"=>{"b"=>nil}, "d"=>nil, "f"=>{"g"=>nil}}
答案 2 :(得分:1)
h = {'a'=>{'b'=>'c'},'d'=>'e','f'=>{'g'=>''}}
def cleaned_hash(h)
h.reduce({}) do |memo, (key, val)|
memo[key] = if val.is_a? Hash
cleaned_hash(val)
else
nil
end
memo
end
end
cleaned_hash h
# => {"a"=>{"b"=>nil}, "d"=>nil, "f"=>{"g"=>nil}}
这不会修改您的哈希值,而是为您提供已清理的副本