iterate over a hash with values containing a array of hashes

Discussion in 'Ruby' started by Bruno Moura, Nov 28, 2009.

  1. Bruno Moura

    Bruno Moura Guest

    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_TGFE"
    "F15;first;digg;last;;data;GFC;Xcode;F15;type;T_1000"
    "F17;first;X01;last;Sx;data;ATT;Xcode;F17;type;H_TGFE"
    "F17;first;DEF;last;Z;data;VTA;Xcode;F17;type;G_TRD"
    "F17;first;EDF;last;FR;data;CFC;Xcode;F17;type;T_900"

    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
     
    Bruno Moura, Nov 28, 2009
    #1
    1. Advertisements

  2. Bruno Moura

    brabuhr Guest

    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?
     
    brabuhr, Nov 28, 2009
    #2
    1. Advertisements

  3. Bruno Moura

    Bruno Moura Guest

    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!

     
    Bruno Moura, Nov 28, 2009
    #3
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.