Alex Rivera | Logout

What is the best way to convert an array to a hash in Ruby

Asked 2008-09-02T13:53:55.143
145

In Ruby, given an array in one of the following forms...

[apple, 1, banana, 2]
[[apple, 1], [banana, 2]]

...what is the best way to convert this into a hash in the form of...

{apple => 1, banana => 2}
Edit
Report

2 Answers

5

You can also simply convert a 2D array into hash using:

1.9.3p362 :005 > a= [[1,2],[3,4]]

 => [[1, 2], [3, 4]]

1.9.3p362 :006 > h = Hash[a]

 => {1=>2, 3=>4} 
answered 2013-01-11T13:54:40.443
3

Appending to the answer but using anonymous arrays and annotating:

Hash[*("a,b,c,d".split(',').zip([1,2,3,4]).flatten)]

Taking that answer apart, starting from the inside:

  • "a,b,c,d" is actually a string.
  • split on commas into an array.
  • zip that together with the following array.
  • [1,2,3,4] is an actual array.

The intermediate result is:

[[a,1],[b,2],[c,3],[d,4]]

flatten then transforms that to:

["a",1,"b",2,"c",3,"d",4]

and then:

*["a",1,"b",2,"c",3,"d",4] unrolls that into "a",1,"b",2,"c",3,"d",4

which we can use as the arguments to the Hash[] method:

Hash[*("a,b,c,d".split(',').zip([1,2,3,4]).flatten)]

which yields:

{"a"=>1, "b"=>2, "c"=>3, "d"=>4}
answered 2010-06-16T19:14:25.910

Your Answer