From: David Alan Black Date: 2001-02-21T08:56:16+09:00 Subject: [ruby-talk:11195] RCR: Enumerable#hashify 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