array of hashes

  • Thread starter SrikanthMandava2004
  • Start date
S

SrikanthMandava2004

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";
}
}
 
G

Gunnar Hjalmarsson

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";
 
S

SrikanthMandava2004

Thanks for the advice.

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.
"Some strange numbers" is a terribly bad description of the actual output.

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.
 
S

SrikanthMandava2004

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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,262
Messages
2,571,056
Members
48,769
Latest member
Clifft

Latest Threads

Top