Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^2: Accessing an array of anonymous hashes

by thezip (Vicar)
on Mar 26, 2007 at 17:17 UTC ( [id://606621]=note: print w/replies, xml ) Need Help??


in reply to Re: Accessing an array of anonymous hashes
in thread Accessing an array of anonymous hashes

Yes, thanks. I did try this initially, and it was the only way that I could get it to work. I slowly began to realize that I was probably using the wrong data structure when I had to do this...

Alternatively, is there a means, through clever indexing or such, that will also get me to the values I seek?

  • Comment on Re^2: Accessing an array of anonymous hashes

Replies are listed 'Best First'.
Re^3: Accessing an array of anonymous hashes
by mreece (Friar) on Mar 26, 2007 at 18:02 UTC
    you can dereference the hash, then treat it as a list:
    print Dumper( (%{ $transaction_record_fields_method1->[2] })[0] ); print Dumper( (%{ $transaction_record_fields_method1->[2] })[1] );
    but it probably makes more sense to just use an AoA.
      What do you think about this structure?
      my $transaction_record_fields = { 'Batch_Agency' => { COL => 0, POS => [ 1 .. 3] }, 'Batch_Date' => { COL => 1, POS => [ 4 .. 11] }, 'Batch_Type' => { COL => 2, POS => [ 12 .. 12] }, };

      Eventually, I'll be inserting some data into each column, so it will end up looking like this:

      my $transaction_record_fields = { 'Batch_Agency' => { COL => 0, POS => [ 1 .. 3], VALUE => + "AAA" }, 'Batch_Date' => { COL => 1, POS => [ 4 .. 11], VALUE => + "BBBBBBBB"}, 'Batch_Type' => { COL => 2, POS => [ 12 .. 12], VALUE => + "C"}, };

      I like the idea of being able to insert by fieldname rather than by a numeric index, and this structure supports that.

      OTOH, that fact that I have to hard-code the column index seems a little funky to me.



        Generaly you would want your data definition, and your data separate. You would then apply that definition to your data. I would think you end up with an AoA for the definition and then an array of data (or AoA if you have multiple rows of data. The column of the data then corresponds directly to the column of the definition.

        use strict; use warnings; #definition AoA my $transaction_records = [ [ 'Batch_Agency' => [ 1 .. 3] ], [ 'Batch_Date' => [ 4 .. 11] ], [ 'Batch_Type' => [ 12 .. 12] ], ]; my $i = 0; #build a map of column name to column my $key_map = { map { $_->[0] => $i++ } @$transaction_records }; #then your rows could look like my $row1 = [ 'agc', '05-JAN-2007', 'type']; my $row2 = [ 'agc', '05-JAN-2007', 'type']; #and you could access data like $row1->[ $key_map->{Batch_Agency} ] = 'abc'; #multiple rows could look like my $rows = [ $row1, $row2]; for my $i ( 0,1,2) { print $transaction_records->[$i]->[0], " = ", $row1->[$i], "\n"; }

        ___________
        Eric Hodges

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://606621]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (3)
As of 2024-04-25 21:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found