Loop through multidimensional Hash of Arrays in Perl -


i have multidimensional hash of arrays represent student's grade in each subject first 4 assignments.

my %students_grades = (     colton => {         english     => [ 90, 95, 80, 75 ],         mathematics => [ 77, 89,94, 100 ],     }, ); 

the syntax bit off here's code creates hash of arrays above.

#!/usr/bin/perl %students_grades; $students_grades{'colton'}{'english'}[0] = 90; $students_grades{'colton'}{'english'}[1] = 95; $students_grades{'colton'}{'english'}[2] = 80; $students_grades{'colton'}{'english'}[3] = 75;  $students_grades{'colton'}{'history'}[0] = 77; $students_grades{'colton'}{'history'}[1] = 89; $students_grades{'colton'}{'history'}[2] = 94; $students_grades{'colton'}{'history'}[3] = 100; 

how loop through student's grades received in history using foreach loop? right i'm looping through using loop.

my $num_of_grades = scalar @{$students_grades{'colton'}{'history'}}; (my $i=0; $i <= $num_of_grades; $i++) {     print $students_grades{'colton'}{'history'}[$i] . "\n"; } 

this representation of code in actual program hash of arrays more complicated want loop through hash of arrays using foreach loop because it'll easier handle. how do that?

for (my $i=0; $i<@array; ++$i) {    $ele = $array[$i];    ... } 

can written simpler as

for $ele (@array) {    ... } 

so have used following:

for $grade (@{ $students_grades{'colton'}{'english'} }) {    print("$grade\n"); } 

my $grade = $students_grades{'colton'}{'english'}[0]; 

is short for

my $grade = $students_grades{'colton'}->{'english'}->[0]; 

which means can do

my $grades = $students_grades{'colton'}{'english'}; $grade = $grades->[0]; 

which means have used following:

my $grades = $students_grades{'colton'}{'english'}; $grade (@$grades) {    print("$grade\n"); } 

knowing allows 1 escalate following:

for $student_name (keys(%students_grades)) {    $student_grades_by_class = $students_grades{$student_name};    $class_name (keys(%$student_grades_by_class)) {       $grades = $student_grades_by_class->{$class_name};       $grade (@$grades) {          print("$student_name: $class_name: $grade\n");       }    } } 

Comments

Popular posts from this blog

javascript - Chart.js (Radar Chart) different scaleLineColor for each scaleLine -

apache - Error with PHP mail(): Multiple or malformed newlines found in additional_header -

java - Android – MapFragment overlay button shadow, just like MyLocation button -