Ruby Change Request -- new method

Name:

  Enumerable#hashify(value)


Description: 

  Return a hash based on iterating through the receiver (an
  enumerable), either setting every value to the parameter "value" or
  setting the values via a block.

   
Examples:

   a = %w{ one two three }
   c = 0

   a.hashify
     => {"one"=>true, "three"=>true, "two"=>true}

   a.hashify(1)
     => {"one"=>1, "three"=>1, "two"=>1}

   a.hashify { |e| [e.upcase, c += 1] } 
     => {"ONE"=>1, "THREE"=>3, "TWO"=>2}


Quick implementation:

  module Enumerable
    def hashify(v=true)
      res = {}
      each do |e|
	if block_given?
	  key,val = yield e
	  res[key] = val
	else
	  res[e] = v
	end
      end
      res
    end
  end


Comments:

  There's been a lot of discussion about Enumerable-to-Hash conversions
  on ruby-talk.  Now that we have an RCR process, I thought it was a
  good time to put one or more of these things in the request pipeline.

  I'm trying to keep it simple here, by proposing what I consider the
  the most useful thing, along E-to-H lines -- namely, a concise way
  to populate a hash from an enumerable and either a single value or a
  block.  

  I have deliberately *not* requested all possible variations and
  nuances of E-to-H behavior.  The earlier discussions have actually
  gone beyond what I'm proposing here, in complexity.  The one thing
  they haven't done is establish whether any of it, including this
  simple one, will become part of Ruby :-)  So I'm going back to
  basics.


Ruby-talk references:

  (based on a search for "to_h" -- probably not very complete)

   6593
   6594
   6611
   6612
   6613
   6614
   6663
   7186
   7367
   7368
   7371
   7427


David

-- 
David Alan Black
home: dblack / candle.superlink.net
work: blackdav / shu.edu
Web:  http://pirate.shu.edu/~blackdav