Depois eu leio

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

No comments yet. Be the first.

Leave a reply