KDr2
4/29/2009 6:20:00 AM
[Note: parts of this message were removed to make it a legal post.]
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 <fredjoha@gmail.com> 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.