[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

[newbie] Hash to String ?

Josselin

9/27/2006 10:59:00 AM

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 ?

thanks

joss

5 Answers

Josselin

9/27/2006 11:25:00 AM

0

On 2006-09-27 12:58:48 +0200, Josselin <josselin@wanadoo.fr> said:

> 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 ?
>
> thanks
>
> joss

sorry for this silly question..
soem homework... and got the solution :

def dropdown_month(default)
months = []
1.step(12, 1) do |i|
l = Date::MONTHNAMES[i]
m = i.to_s
months << [ l, m ]
end
return options_for_select(months, default)
end

gives me the correct structure

joss

Jano Svitok

9/27/2006 11:36:00 AM

0

On 9/27/06, Josselin <josselin@wanadoo.fr> 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)]

Josselin

9/27/2006 12:46:00 PM

0

On 2006-09-27 13:35:35 +0200, "Jan Svitok" <jan.svitok@gmail.com> said:

> On 9/27/06, Josselin <josselin@wanadoo.fr> 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)

Jeremy Wells

9/27/2006 2:13:00 PM

0

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 ?
>
months = Date::MONTHNAMES.compact.collect{|m| [m,
Date::MONTHNAMES.index(m)]}

Josselin

9/28/2006 11:39:00 AM

0

On 2006-09-27 16:13:05 +0200, Jeremy Wells <jwells@servalsystems.co.uk> said:

> months = Date::MONTHNAMES.compact.collect{|m| [m, Date::MONTHNAMES.index(m)]}

thanks , that's what I was looking for...
doesn't come at first hand for a newbie minded..