Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > iterate over a hash with values containing a array of hashes

Reply
Thread Tools

iterate over a hash with values containing a array of hashes

 
 
Bruno Moura
Guest
Posts: n/a
 
      11-28-2009
Hi

I need iterate over a hash with values containing a array of hashes for
build a string with comma values


I tried tranform this

{"F15"=> [
{"first"=>"01" , "last"=>"" , "data"=>"ATX", "Xcode"=>"F15",
"type"=>"G_TRD"},
{"first"=>"Aero", "last"=>"Z", "data"=>"VTA", "Xcode"=>"F15",
"type"=>"H_TGFE"},
{"first"=>"digg", "last"=>"" , "data"=>"GFC", "Xcode"=>"F15",
"type"=>"T_1000"}],
"F17"=> [
{"first"=>"X01", "last"=>"Sx" , "data"=>"ATT", "Xcode"=>"F17",
"type"=>"H_TGFE"},
{"first"=>"DEF", "last"=>"Z" , "data"=>"VTA", "Xcode"=>"F17",
"type"=>"G_TRD"},
{"first"=>"EDF", "last"=>"FR" , "data"=>"CFC", "Xcode"=>"F17",
"type"=>"T_900"}]}

into a string like this:


"F15;first;01;last;;data;ATX;Xcode;F15;type;G_ TRD"
"F15;first;Aero;last;Z;data;VTA;Xcode;F15;type;H_T GFE"
"F15;first;digg;last;;data;GFC;Xcode;F15;type;T_10 00"
"F17;first;X01;last;Sx;data;ATT;Xcode;F17;type;H_T GFE"
"F17;first;DEF;last;Z;data;VTA;Xcode;F17;type;G_TR D"
"F17;first;EDF;last;FR;data;CFC;Xcode;F17;type;T_9 00"

I believe that this task isn't complex, but for me is difficult to do
now

Everyone can help me with this?

thanks so much
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
brabuhr@gmail.com
Guest
Posts: n/a
 
      11-28-2009
On Sat, Nov 28, 2009 at 10:15 AM, Bruno Moura <(E-Mail Removed)> wrote:
> I need iterate over a hash with values containing a array of hashes for
> build a string with comma values
>
> I tried tranform this

...
> into a string like this:

...
> I believe that this task isn't complex, but for me is difficult to do
> now


How far were you able to get before getting stuck? The basic way to
iterate over a Hash is each:

irb(main):001:0> hash = {"A" => 1, "B" => 2}
=> {"A"=>1, "B"=>2}
irb(main):002:0> hash.each{|key, value|
irb(main):003:1* p value
irb(main):004:1> }
1
2
=> {"A"=>1, "B"=>2}

When the values stored in the Hash are Arrays, you can use each within each:

irb(main):005:0> hash = {"A" => [1,2,3], "B" =>[4,5,6]}
=> {"A"=>[1, 2, 3], "B"=>[4, 5, 6]}
irb(main):006:0> hash.each{|key, array|
irb(main):007:1* p key
irb(main):008:1> array.each{|element|
irb(main):009:2* p element
irb(main):010:2> }
irb(main):011:1> }
"A"
1
2
3
"B"
4
5
6
=> {"A"=>[1, 2, 3], "B"=>[4, 5, 6]}

Does that help get you moving in the right direction?

 
Reply With Quote
 
 
 
 
Bruno Moura
Guest
Posts: n/a
 
      11-28-2009
Thanks guys, you rocks!

The snippets that you showed save my time!

I can iterate over a simple hash or array, but when is necessary work if
a more complex structure, like a array of hashes or a hash of array of
hashes I
feel paralyzed.I don't know how I should use blocks in the right way or
efficiently.

For me is really difficult to understand this.

How can I improve my practice with this kind of task?

Thanks again!


daz wrote:
> Bruno Moura wrote:
>> Hi
>>
>> I need iterate over a hash with values containing a array of hashes for
>> build a string with comma values
>>
>> (...)
>>
>> Everyone can help me with this?
>>
>> thanks so much

>
>
> ###========================
>
> input = {"F15"=> [
> {"first"=>"01", "last"=>"" , "data"=>"ATX",
> "Xcode"=>"F15", "type"=>"G_TRD"},
> {"first"=>"Aero", "last"=>"Z", "data"=>"VTA",
> "Xcode"=>"F15", "type"=>"H_TGFE"},
> {"first"=>"digg", "last"=>"" , "data"=>"GFC",
> "Xcode"=>"F15", "type"=>"T_1000"}],
> "F17"=> [
> {"first"=>"X01", "last"=>"Sx", "data"=>"ATT",
> "Xcode"=>"F17", "type"=>"H_TGFE"},
> {"first"=>"DEF", "last"=>"Z", "data"=>"VTA",
> "Xcode"=>"F17", "type"=>"G_TRD"},
> {"first"=>"EDF", "last"=>"FR" , "data"=>"CFC",
> "Xcode"=>"F17", "type"=>"T_900"}]}
>
>
> chk_answer = ["F15;first;01;last;;data;ATX;Xcode;F15;type;G_TRD" ,
> "F15;first;Aero;last;Z;data;VTA;Xcode;F15;type;H_T GFE",
> "F15;first;digg;last;;data;GFC;Xcode;F15;type;T_10 00",
> "F17;first;X01;last;Sx;data;ATT;Xcode;F17;type;H_T GFE",
> "F17;first;DEF;last;Z;data;VTA;Xcode;F17;type;G_TR D",
> "F17;first;EDF;last;FR;data;CFC;Xcode;F17;type;T_9 00" ]
>
> #~~~
> res = [] # results
>
> input.sort.each do |k1,a1|
> a1.each do |h|
> out = '' << k1
> ['first', 'last', 'data', 'Xcode', 'type'].each do |k2|
> out << sprintf(';%s;%s', k2, h[k2]) # append to string
> end
> res << out # push line into result array
> end
> end
> #~~~
>
> puts '*** C o r r e c t ***' if res == chk_answer
> puts res
>
> ###========================
>
> #
>
> daz


--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Iterate over hash of nested hashes Glenn Ritz Ruby 10 03-01-2010 08:12 AM
Array of Hashes in an array of hashes - Complicated! Matt Brooks Ruby 16 09-16-2009 05:53 PM
How to make an array of hashes to a single array with all thevalues of these hashes ? kazaam Ruby 12 09-13-2007 01:30 PM
Sorting a hash containing a hash of hashes IanW Perl Misc 3 12-14-2005 03:02 PM
Hash of hashes, of hashes, of arrays of hashes Tim O'Donovan Perl Misc 5 10-28-2005 05:59 AM



Advertisments