Forum: Ruby Array to Hash in 1.8.6 vs 1.8.7

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Fernando P. (Guest)
on 2009-04-28 16:21
I'm damn toast!

My dev machine runs a manually compiled 1.8.7 version of Ruby. My server
runs a Debian Etch with Ruby 1.8.6 version.

From a string:

1:2_5:6

I want to convert it to a hash: {"1" => "2", "5" => "6"}

On my dev machine the following works:
Hash[(session.split("_").map { |couples| couples.split(":") }).flatten]

On my server it pukes on me with the following error:
odd number of arguments for Hash

How can I fix it with Ruby 1.8.6 and 1.8.7 compatibility? I don't want
to play with the Ruby version of Debian etch as it's the latest
available package.


Many thanks in advance.
badboy (Guest)
on 2009-04-28 16:25
(Received via mailing list)
Fernando P. schrieb:
>
>
> Many thanks in advance.
use * like this
  Hash[*(session.split("_").map { |couples| couples.split(":")
}).flatten]
Fernando P. (Guest)
on 2009-04-28 16:27
> use * like this
>   Hash[*(session.split("_").map { |couples| couples.split(":")
> }).flatten]

Damn splat operator! Thank you so much!!! It works!
7stud -. (Guest)
on 2009-04-28 17:43
Fernando P. wrote:
> I'm damn toast!
>
> My dev machine runs a manually compiled 1.8.7 version of Ruby. My server
> runs a Debian Etch with Ruby 1.8.6 version.
>
> From a string:
>
> 1:2_5:6
>
> I want to convert it to a hash: {"1" => "2", "5" => "6"}
>
> On my dev machine the following works:
> Hash[(session.split("_").map { |couples| couples.split(":") }).flatten]
>
> On my server it pukes on me with the following error:
> odd number of arguments for Hash
>
> How can I fix it with Ruby 1.8.6 and 1.8.7 compatibility? I don't want
> to play with the Ruby version of Debian etch as it's the latest
> available package.
>
>
> Many thanks in advance.

Here's something less tortured (although still too gruesome for my
tastes):

str = '1:2_5:6'
result = Hash[*str.split(/[:_]/)]

p result

--output:--
{"1"=>"2", "5"=>"6"}
This topic is locked and can not be replied to.