Robert Klemme
3/24/2006 9:42:00 AM
Dinesh Dinesh wrote:
> Hi,
>
> I'm new to Ruby. I want to know how to iterate over a nested hash as
> below.
>
> *****************************************************************************
> testhash = {
>
> "recipeKey"=>{"title"=>"RailsBook", "category_id"=>"1",
> "description"=>"This is a book about Rails", "instructions"=>"Read It"}
>
> }
> testhash.each {|key, value| print key, " value is : ", value, "\n" }
>
> Here is the output i get..
>
> ==> recipeKey value is : titleRailsBookdescriptionThis is a book about
> Railscategory_id1instructionsRead It
> *****************************************************************************
>
> As per the input "testhash", the value itself is a hash rt with keys as
> "title","category_id","description" and "instructions"? Now how to get
> these values as a key/value pair ??
>
> If we apply "eash" operator for "testhash", the values are getting
> printed "continously string" as shown above???, is this the expected
> behaviour?
Yes, it's the result of a hash converted to string.
> I tried to assign this value into a "new hash" variable and when i
> applied "each" on this varibale, it said "each" varible undefined, the
> reason may be that the value which i assinged is not a hash?
"each" is a method not a variable.
> so wanted
> to know how to iterate the above nested hash ? Please help me out.
First of all you should describe what you want to see during the
iteration. Do you only want to see key value pairs of nested hashes?
Do you want to see key1,key2,value?
If you just want to print the whole Hash you can use pp:
>> require 'pp'
=> true
>> testhash = {
....
>> pp testhash
{"recipeKey"=>
{"title"=>"RailsBook",
"description"=>"This is a book about Rails",
"category_id"=>"1",
"instructions"=>"Read It"}}
Kind regards
robert