Array#to_hash


#1

Would any problems arise from extending Array with this?

Convert an array into an indexed hash.

[:a,:b,:c].to_hash #=> {0=>:a,1=>:b,2=>:c}

def to_hash
h = {}
each_with_index do |v, i|
h[i] = v
end
h
end

Thanks,
T.


#2

Hi,

In message “Re: Array#to_hash”
on Thu, 12 Feb 2009 00:19:10 +0900, Trans removed_email_address@domain.invalid
writes:

|Would any problems arise from extending Array with this?

Nothing I can think of, except that I have never wanted such
conversion from array to hash in my 16 year Ruby programming. :wink:

          matz.

#3

On Wed, Feb 11, 2009 at 4:26 PM, Yukihiro M. removed_email_address@domain.invalid
wrote:

Hi,

In message “Re: Array#to_hash”
on Thu, 12 Feb 2009 00:19:10 +0900, Trans removed_email_address@domain.invalid writes:

|Would any problems arise from extending Array with this?

Nothing I can think of, except that I have never wanted such
conversion from array to hash in my 16 year Ruby programming. :wink:

Yeah the usecase somehow eludes me too. Did you mean
{:a => 0, :b => 1, :c =>2 }
by any chance?

Robert


#4

On 11.02.2009 16:19, Trans wrote:

end
h

end

It is still the question that David has mentioned a few days ago: there
are many reasonable ways for Array to Hash conversion and who decides
which is the “standard” one which should go into Array#to_hash?

Cheers

robert


#5

On Feb 11, 10:26 am, Yukihiro M. removed_email_address@domain.invalid wrote:

Hi,

In message “Re: Array#to_hash”
on Thu, 12 Feb 2009 00:19:10 +0900, Trans removed_email_address@domain.invalid writes:

|Would any problems arise from extending Array with this?

Nothing I can think of, except that I have never wanted such
conversion from array to hash in my 16 year Ruby programming. :wink:

True enough. And maybe there never will be. There are many words in
the dictionary I never use too. Still, they have definitions, and if
one were to define Array#to_hash, that would seem like the clear
meaning. (I use #to_h for the more useful conversions).

Thanks,
T.


#6

Hi –

On Thu, 12 Feb 2009, William J. wrote:

each_with_index do |v, i|

“We don’t need no stinkin’ loops!”

a=[:a,:b,:c]
==>[:a, :b, :c]
Hash[ *(0…a.size).zip(a).flatten ]
==>{0=>:a, 1=>:b, 2=>:c}

You’d want to use flatten(1) so as to avoid over-flattening.
(Available as the flatten_x extension for 1.8.6.)

David


David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.rubypal.com
Coming in 2009: The Well-Grounded Rubyist (http://manning.com/black2)

http://www.wishsight.com => Independent, social wishlist management!


#7

Trans wrote:

end
h

end

Thanks,
T.

Always remember:

“We don’t need no stinkin’ loops!”

a=[:a,:b,:c]
==>[:a, :b, :c]
Hash[ *(0…a.size).zip(a).flatten ]
==>{0=>:a, 1=>:b, 2=>:c}


#8

On Feb 12, 2:08 am, “William J.” removed_email_address@domain.invalid wrote:

a = [:a,:b,:c]
==>[:a, :b, :c]
h = a.to_hash
==>{0=>:a, 1=>:b, 2=>:c}
a[2]
==>:c
h[2]
==>:c

Wow! That is a big improvement!

Ha ha. Very funny. It may seem silly, but “identity principles” often
do. You know like, a + 0 = a. How useful does that seem? But it is.

In this, you might want to do something like:

a = [:a,:b,:c]
h = a.to_hash
h[0.5] = :x
h[1.5] = :y
h[2.5] = :z

… etc …

a = h.sort.map{|k,v|v}

T.


#9

Trans wrote:

end
h

end

Thanks,
T.

a = [:a,:b,:c]
==>[:a, :b, :c]
h = a.to_hash
==>{0=>:a, 1=>:b, 2=>:c}
a[2]
==>:c
h[2]
==>:c

Wow! That is a big improvement!


#10

On Feb 12, 11:54 pm, Tom L. removed_email_address@domain.invalid wrote:

want it (by the use of #zip etc.), does this justify an extra method
in Array or maybe even Enumerable?

Just to be clear, I’m not asking that it be put into core Ruby. Just
asking if it is a safe extension.

Nonetheless, I have a bit of a different theory about methods in a
language. I think it’s good to have a lot of them. Just so long as the
name makes it very clear what they do. I understand there are
performance limits to this, so their are reasons to limit the number.
Also, there is unfortunately too much to learn in the industry these
days, so there’s another reason, though a sorry one. Ultimately
computer languages need to become more like verbal ones, and verbal
languages have lots of words, 1,000s are used commonly. 10,000s
irregularly but are used. And 100,000s are available in total to
choose from. I don’t think Ruby is going to implode b/c it includes a
few methods that are hardly ever used.

T.


#11

In this, you might want to do something like:

a = [:a,:b,:c]
h = a.to_hash
h[0.5] = :x
h[1.5] = :y
h[2.5] = :z

How often did you actually want to do this during the past five years?
Since you can quite easily convert an array into a hash the way you
want it (by the use of #zip etc.), does this justify an extra method
in Array or maybe even Enumerable?


#12

yes i agree with you Trans
lots more has no prob.