array of hashes

Discussion in 'Perl Misc' started by SrikanthMandava2004@gmail.com, Feb 19, 2007.

  1. Guest

    I have got multiple hashes in an array with same keys. And I want to
    count the total of values with same keys.

    hash1

    score1 20
    score2 10
    score3 20


    hash2

    score1 30
    score2 20
    score3 30

    Please note that i have multiple hashes not two as above shown. I am
    looking for out put 'Score1 Total = 50; Score2 Total = 30; Score1
    Total = 50; '

    I have tried the following loop, ended up with some strange
    numbers..........advice please

    my $sum = 0;
    for my $m (0 .. $#notesw){
    for $variable (keys %{$notesw[$m]}) {
    print "$variable = ${notesw[$m]{$variable}}\n";
    $sum += ${notesw[$m]{$variable}};
    print "$sum \n";
    }
    }
    , Feb 19, 2007
    #1
    1. Advertising

  2. wrote:
    > I have got multiple hashes in an array with same keys. And I want to
    > count the total of values with same keys.
    >
    > hash1
    >
    > score1 20
    > score2 10
    > score3 20
    >
    >
    > hash2
    >
    > score1 30
    > score2 20
    > score3 30


    What does that mean? Does it mean this structure?

    my @notesw = (
    {
    'score1' => 20,
    'score2' => 10,
    'score3' => 20,
    },
    {
    'score1' => 30,
    'score2' => 20,
    'score3' => 30,
    },
    );

    > I am looking for out put 'Score1 Total = 50; Score2 Total = 30;
    > Score1 Total = 50; '
    >
    > I have tried the following loop, ended up with some strange
    > numbers..........


    "Some strange numbers" is a terribly bad description of the actual output.

    > advice please
    >
    > my $sum = 0;
    > for my $m (0 .. $#notesw){
    > for $variable (keys %{$notesw[$m]}) {
    > print "$variable = ${notesw[$m]{$variable}}\n";
    > $sum += ${notesw[$m]{$variable}};
    > print "$sum \n";
    > }
    > }


    Well, you need 3 sums, not just 1, right?

    Maybe something like this is what you want:

    my ( $sum1, $sum2, $sum3 );
    for my $hashref ( @notesw ) {
    $sum1 += $hashref->{'score1'};
    $sum2 += $hashref->{'score2'};
    $sum3 += $hashref->{'score3'};
    }
    print "Score1 Total = $sum1\n",
    "Score2 Total = $sum2\n",
    "Score3 Total = $sum3\n";

    --
    Gunnar Hjalmarsson
    Email: http://www.gunnar.cc/cgi-bin/contact.pl
    Gunnar Hjalmarsson, Feb 19, 2007
    #2
    1. Advertising

  3. Guest

    Thanks for the advice.

    On Feb 19, 3:07 pm, Gunnar Hjalmarsson <> wrote:
    > wrote:
    > > I have got multiple hashes in an array with same keys. And I want to
    > > count the total of values with same keys.

    >
    > > hash1

    >
    > > score1 20
    > > score2 10
    > > score3 20

    >
    > > hash2

    >
    > > score1 30
    > > score2 20
    > > score3 30

    >
    > What does that mean? Does it mean this structure?
    >
    > my @notesw = (
    > {
    > 'score1' => 20,
    > 'score2' => 10,
    > 'score3' => 20,
    > },
    > {
    > 'score1' => 30,
    > 'score2' => 20,
    > 'score3' => 30,
    > },
    > );


    Yes, I will follow that for my future queries.

    > > I am looking for out put 'Score1 Total = 50; Score2 Total = 30;
    > > Score1 Total = 50; '

    >
    > > I have tried the following loop, ended up with some strange
    > > numbers..........

    >
    > "Some strange numbers" is a terribly bad description of the actual output.
    >
    > > advice please


    I had out put in 5 digits like 25323 or something ....

    > > my $sum = 0;
    > > for my $m (0 .. $#notesw){
    > > for $variable (keys %{$notesw[$m]}) {
    > > print "$variable = ${notesw[$m]{$variable}}\n";
    > > $sum += ${notesw[$m]{$variable}};
    > > print "$sum \n";
    > > }
    > > }

    >
    > Well, you need 3 sums, not just 1, right?
    >
    > Maybe something like this is what you want:
    >
    > my ( $sum1, $sum2, $sum3 );
    > for my $hashref ( @notesw ) {
    > $sum1 += $hashref->{'score1'};
    > $sum2 += $hashref->{'score2'};
    > $sum3 += $hashref->{'score3'};
    > }
    > print "Score1 Total = $sum1\n",
    > "Score2 Total = $sum2\n",
    > "Score3 Total = $sum3\n";



    The above hashes are just examples, however files I am working on have
    hash value with spaces eg: 'Total data count' which is creating
    'Use of uninitialized value in addition (+)' error. Not sure whether I
    still need to use the for loop of 'for my $m (0 .. $#notesw)' with the
    logic you provided.

    I appreciate the help, thanks.
    > --
    > Gunnar Hjalmarsson
    > Email:http://www.gunnar.cc/cgi-bin/contact.pl
    , Feb 19, 2007
    #3
  4. Guest

    Gunnar Hjalmarsson

    Ignore my previous response as newbie's panic reply.

    Thanks for your help, managed to solve that. And I need better
    understanding of references, and thats my next task.

    thanks,

    Sri
    , Feb 19, 2007
    #4
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ben Holness

    Hashes of Hashes via subs

    Ben Holness, Oct 5, 2003, in forum: Perl
    Replies:
    8
    Views:
    550
    Ben Holness
    Oct 8, 2003
  2. Steven Arnold

    using hashes as keys in hashes

    Steven Arnold, Nov 23, 2005, in forum: Ruby
    Replies:
    3
    Views:
    157
    Mauricio Fernández
    Nov 23, 2005
  3. kazaam
    Replies:
    12
    Views:
    260
    Matthias Wächter
    Sep 13, 2007
  4. Matt Brooks
    Replies:
    16
    Views:
    220
    Matt Brooks
    Sep 16, 2009
  5. Tim O'Donovan

    Hash of hashes, of hashes, of arrays of hashes

    Tim O'Donovan, Oct 27, 2005, in forum: Perl Misc
    Replies:
    5
    Views:
    201
Loading...

Share This Page