A Divendres 15 Setembre 2006 22:21, D. Bolliger va escriure:
> Geetha Weerasooriya am Freitag, 15. September 2006 15:52:
> > Hi ,
> >
> > I have an Array of Hashes   as follows:
> >
> > @array = (
> >  { 'A'=>1, 'B' =>2, 'C'=>3, 'D'=>4}
> > { 'A'=>5, 'B' =>6, 'C'=>7, 'D'=>8}
> > { 'A'=>9, 'B' =>10, 'C'=>11, 'D'=>12}
> > { 'A'=>13, 'B' =>14, 'C'=>15, 'D'=>16}
> > { 'A'=>17, 'B' =>18, 'C'=>19, 'D'=>20}
> > { 'A'=>21, 'B' =>22, 'C'=>23, 'D'=>24}
> > )
> >
> > I have given a reference to this array in my script.
> >
> > I want to do some calculation with only one key of each hash. For
> > example, I want to subtract from the value of key 'B' of last hash all
> > the other values of the same key into a one column like follows
> >
> > 22-2      20
> > 22-6      16
> > 22-10     12
> > 22-14      8
> > 22-18      4
> > 22-22      0
> >
> > Can you please tell me how to do this ?
>
> Hi Geetha (again :-)
>
> Here's a slightly shorter version of J.W.Krahn's:
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
>
> my @array = (
>     { A =>  1, B =>  2, C =>  3, D =>  4 },
>     { A =>  5, B =>  6, C =>  7, D =>  8 },
>     { A =>  9, B => 10, C => 11, D => 12 },
>     { A => 13, B => 14, C => 15, D => 16 },
>     { A => 17, B => 18, C => 19, D => 20 },
>     { A => 21, B => 22, C => 23, D => 24 },
>     );
>
> # avoids multiple recalculation of the same value:
> #
> my $the_main_value=$array[ -1 ]->{ B };
>
>
> for my $hash ( @array ) {
>     print $the_main_value - $hash->{ B }, "\n";
> }
>
> __END__
>
>
> Suppose you want to use this principle for several arrays, you can make a
> procedure:
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
>
> my @array = (
> #...
>    );
>
>
> sub my_calculation {
>   my $array_ref=shift;
>
>   my $the_one_value=$array_ref->[ -1 ]->{ B };
>
>   for my $hash ( @$array_ref ) {
>       print $the_one_value - $hash->{ B }, "\n";
>   }
> }
>
> my_calculation ([EMAIL PROTECTED]);
>
> __END__
>
> maybe you want to generalize the sub a bit:
>
> # ...
> sub my_calculation {
>   my ($array_ref, $keyname)[EMAIL PROTECTED];
>
>   my $the_one_value=$array_ref->[ -1 ]->{ $keyname };
>
>   for my $hash ( @$array_ref ) {
>       print $the_one_value - $hash->{ $keyname }, "\n";
>   }
> }
> # ...
> my_calculation ([EMAIL PROTECTED], 'B');
>
> __END__
>
> greets
>
> Dani

To access an elements of an array of hashes, do like: 
print $array[4]{A},"\n";        #is value 17.

-- 
Xavier Mas

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to