Pesquisar e alterar um valor no Hash
Esses dias precisei procurar e alterar um valor específico num Hash, por exemplo:
my_hash = {:key1 => "value1", :key2 => "value2", [{:key3 => "target_value"}]}
Como a classe Hash não oferece busca recursiva por padrão, podemos abri-la e adicionar nosso próprio método.
class Hash def swap_value(target_value, new_value) self.each do |k, v| case v when String self[k] = new_value if v == target_value when Array v.each {|item| item.swap_value(target_value, new_value) } when Hash v.swap_value(target_value, new_value) end end end end
É isso, agora a classe Hash tem um método para find and replace recursivo.
my_hash.swap_value("target_value", "my_new_value")No comments