Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^3: Accessing an array of anonymous hashes

by mreece (Friar)
on Mar 26, 2007 at 18:02 UTC ( #606625=note: print w/replies, xml ) Need Help??


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

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.

Replies are listed 'Best First'.
Re^4: Accessing an array of anonymous hashes
by thezip (Vicar) on Mar 26, 2007 at 18:14 UTC
    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
Node Status?
node history
Node Type: note [id://606625]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (3)
As of 2021-01-25 01:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?