Issue #666 has been updated by Marc-Andre Lafortune.


Thanks for commenting on this old request.

You might want to read the thread [ruby-core:33683] on Akira's
proposal for Enumerable#categorize and my alternative proposal
Enumerable#associate which would act as a more versatile
Enumerable#to_hash.

Your input could have more impact on that thread than on this one.
Hopefully we can come up with a neat functionality for the some future
version of Ruby.

----------------------------------------
Feature #666: Enumerable::to_hash
http://redmine.ruby-lang.org/issues/666

Author: Marc-Andre Lafortune
Status: Rejected
Priority: Low
Assignee: Yukihiro Matsumoto
Category: 
Target version: 1.9.x


=begin
 There are many ways to obtain an array from enumerables (to_a, map, ...).
 There is no natural way to obtain a hash from an enumerable (except for Hash[some_array]).
 There is a Hash::to_a but no Array::to_hash.
 Here is what I would like:
 
 [[:hello, "world"], [:choice, [:red_pill, :blue_pill]]].to_hash ==> {:hello=>"world", :choice=>[:red_pill, :blue_pill]}
 (1..3).to_hash{|n| [n, n**2]} ==> {1 => 1, 2 ==> 4, 3 ==> 9}
 
 I propose to add the following Enumerable::to_hash :
 
 module Enumerable
   def to_hash
     result = {}
     self.each do |key, value|
       key, value = yield(key, value) if block_given?
       result[key] = value
     end
     result
   end
 end
 
 Since Hash::to_a returns an array of key-value pairs, I fell it's natural that a block to construct a Hash should return key-value pairs. 
 This definition has nice symmetric properties: for any Hash h, the following all return a copy of h.
 h.to_a.to_hash
 h.to_hash{|p| p}
 h.to_hash{|k,v| [k,v]}
 h.keys.zip(h.values).to_hash
 
 Thank you for your attention,
 
 Marc-Andre Lafortune
=end



-- 
http://redmine.ruby-lang.org