Project

General

Profile

Feature #10208

Updated by shyouhei (Shyouhei Urabe) over 3 years ago

Now that we can convert 'a list of [key, value] pairs' into a hash with Enumerable#to_h, 
 how about make it take a block to specify 'how to convert each element into a [key, value] pair'?  

 Example: 

 ~~~ 
 # Convert users into an {id => name} hash 
 users.map{|u| [u.id, u.name]}.to_h 
     ↓ 
 # Convert users into an {id => name} hash 
 users.to_h{|u| [u.id, u.name]} 
 ~~~ 

 This could also be a solution for these feature requests: 

 * Feature #6669 A method like Hash#map but returns hash 

         

   hsh.apply{|k, v| [k.to_s, v]} 
         
   == hsh.to_h{|k, v| [k.to_s, v]} 

 * Feature #7793 New methods on Hash 
   Feature #9970 Add `Hash#map_keys` and `Hash#map_values` 

         

   hsh.map_k(&:to_s) 
         
   == hsh.to_h{|k, v| [k.to_s, v]} 
         
   hsh.map_v(&:to_i) 
         
   == hsh.to_h{|k, v| [k, v.to_i]} 
         
   hsh.map_kv(&block) 
         
   == hsh.to_h(&block) 

Back