DEVFYI - Developer Resource - FYI

How do I sort a hash by the hash value?

Perl Questions and Answers


(Continued from previous question...)

How do I sort a hash by the hash value?

Here's a program that prints the contents 
of the grades hash, sorted numerically by the hash value:

#!/usr/bin/perl -w

# Help sort a hash by the hash 'value', not the 'key'.     
             to highest).
sub hashValueAscendingNum {
   $grades{$a} <=> $grades{$b};
}



# Help sort a hash by the hash 'value', not the 'key'.     
# Values are returned in descending numeric order          
# (highest to lowest).
sub hashValueDescendingNum {
   $grades{$b} <=> $grades{$a};
}


%grades = (
	student1 => 90,
	student2 => 75,
	student3 => 96,
	student4 => 55,
	student5 => 76,
);

print "\n\tGRADES IN ASCENDING NUMERIC ORDER:\n";
foreach $key (sort hashValueAscendingNum (keys(%grades))) {
   print "\t\t$grades{$key} \t\t $key\n";
}

print "\n\tGRADES IN DESCENDING NUMERIC ORDER:\n";
foreach $key (sort hashValueDescendingNum (keys(%grades))) {
   print "\t\t$grades{$key} \t\t $key\n";
}

(Continued on next question...)

Other Interview Questions