Add method hash class to invert a hash: turn value to key : Hash Extensions « Hash « Ruby






Add method hash class to invert a hash: turn value to key


class Hash
  def safe_invert
    new_hash = {}
    self.each do |k,v|
      if v.is_a? Array
        v.each { |x| new_hash.add_or_append(x, k) }
      else
        new_hash.add_or_append(v, k)
      end
    end
    return new_hash
  end
  def add_or_append(key, value)
    if has_key?(key)
      self[key] = [value, self[key]].flatten
    else
      self[key] = value
    end
  end
end

phone_directory = {  'A' => '1',
                     'B' => '2',
                     'M' => '3' }

p phone_directory.safe_invert
p phone_directory.safe_invert.safe_invert

 








Related examples in the same category

1.Add method to Hash class to remove one hash from another
2.Grep a hash
3.Find all