From: KDr2 Date: 2009-04-29T15:19:33+09:00 Subject: Re: Hash#map --001636e8ff9dfae8900468ab8fd9 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit irb(main):041:0> o={"a",1,"b",2} => {"a"=>1, "b"=>2} irb(main):042:0> o.merge(o){|k,ov|ov*2} => {"a"=>2, "b"=>4} On Wed, Apr 29, 2009 at 2:00 PM, Fredrik wrote: > Is there any good reason why Hash#map does not give back a Hash (Ruby > 1.8 but same in 1.9 as far as I know)? I often find myself writing > these kind of things: > > newhash = oldhash.inject({}) { |h,(k,v)| h[k] = some_operation(v); h } > > but that doesn't look pretty at all in my opinion. I want to just > write like this: > > newhash = oldhash.map { |k,v| some_operation(v) } > > I finally got around to change this behaviour for my own code, but are > all Ruby users supposed to invent this wheel on their own? Wouldn't it > be better if Hash#map behaved like this? Or is there something I am > missing? > > class Hash > def hashmap > self.inject({}) do |newhash, (k,v)| > newhash[k] = yield(k, v) > newhash > end > end > end > > > Regards, > Fredrik > > -- Best Regards, -- KDr2, at x-macro.com. --001636e8ff9dfae8900468ab8fd9--