From: Josselin Date: 2006-09-27T21:50:21+09:00 Subject: Re: [newbie] Hash to String ? On 2006-09-27 13:35:35 +0200, "Jan Svitok" said: > On 9/27/06, Josselin wrote: >> I need to produce this kind of result >> >> l = { "January" => "1"}, {"February => "2"}, { "March" => "3"}, .... } >> >> so I wrote >> >> h = (Array.new(13) {|i| Hash[Date::MONTHNAMES[i], i.to_s]}).slice(1,12) >> which results in : >> [{"January"=>"1"}, {"February"=>"2"}, {"March"=>"3"}, {"April"=>"4"}, >> {"May"=>"5"}, {"June"=>"6"}, {"July"=>"7"}, {"August"=>"8"}, >> {"September"=>"9"}, {"October"=>"10"}, {"November"=>"11"}, >> {"December"=>"12"}] >> >> but I cannot write : l = { h } it's wrong... Hash cannot be >> converted like that.. >> what should I write instead ? > > What do you want to do exactly? Where the String from the title? > If you want to have an Array of Hashes, that's what you've got. If you > want to have > a Hash of Hashes, then you need to provide another set of keys {x => { > y=> z}, ...} > If you want to have just one Hash, then try > > h = Hash[*(1..12).map {|i| [Date::MONTHNAMES[i], i.to_s]}.flatten)] thanks.. (as mentionned in a second post I found a solution) I try to rewrite these 6 lines into one line : months = [] 1.step(12, 1) do |i| l = Date::MONTHNAMES[i] m = i.to_s months << [ l, m ] end which produces : [["January", "1"], ["February", "2"], ["March", "3"], ["April", "4"], ["May", "5"], ["June", "6"], ["July", "7"], ["August", "8"], ["September", "9"], ["October", "10"], ["November", "11"], ["December", "12"]] I need the array months as a parameter for 'options_to_select()' (Rails function)