Mega Code Archive

 
Categories / Ruby / Hash
 

Add method hash class to invert a hash

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