in reply to @array1 vs @array2
To populate it, I would do something like this:# Sorry about the MANY keyword - I would choose a better name # for the secondary data, but I have no clue what would make # sense. my %keyhash = ( $id => { NAME => $name, REF => $ref, MANY => [] } );
Although you may want MANY to be a hash - it really depends on how you want to use your data later.for ( @array1 ) { my ($id,$name,$ref) = split /,/; # You may wish to add some error checking to make sure the # hash key $id does not already exist $keyhash{$id} = { NAME => $name, REF => $ref, MANY => [], } } for ( @array2 ) { my ($id,$name,$ref) = split /,/; # Warn and do nothing if a record is found for which the # $id is not already in %keyhash unless ( defined( $keyhash{$id} ) ) { warn "No such record $id!\n"; next; } push @{$keyhash{$id}{MANY}}, [ $name, $ref ]; }
Finally, to extract the number of records for each ID,
# A little something to get the plurality correct for ( keys %keyhash ) { my $num = @{$keyhash{$_}{MANY}}; printf "%s appeared %d %s\n", $_, $num, $num > 1 ? "times" : "time"; }
I will say my choice of data structures ( hashes instead of arrays ) is really dependant on how you intend using the data later. Hashes, for me, seem to better reflect the relationship between tables better than arrays. YMMV, of course.
Updated 14:04 It was pointed out I had dropped an equals sign. Sigh.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: @array1 vs @array2
by Anonymous Monk on Mar 19, 2001 at 23:59 UTC | |
|
Re: Re: @array1 vs @array2
by Anonymous Monk on Mar 20, 2001 at 00:26 UTC | |
|
Re: Re: @array1 vs @array2
by Anonymous Monk on Mar 20, 2001 at 00:53 UTC | |
by mikfire (Deacon) on Mar 20, 2001 at 06:56 UTC |