把perl中hash的values按从大到小排列

来源:百度知道 编辑:UC知道 时间:2024/06/05 02:10:13
我自己实现了一个算法。但是比较笨拙。不知道perl有没有直接提供这个功能,即直接对hash进行排序。另外,我用两个数组分别存储keys和values。perl中有没有提供数据结构可以把这两个值封装在一起?比如
class item{ int key,value; int getKey(){return key;}}
代码如下:
-----------------------------------------------------------------
#!/usr/perl/bin
use strict;
use Data::Dumper;
my %h=(
"Alex"=>24,
"Sam"=>25,
"Bob"=>30,
"Andy"=>11,
"Wills"=>35,
"Mary"=>16,
"Helen"=>24
);

print(Dumper(\%h)); # output original hash

my (@keys,@values);
my $index;

while(my ($k,$v)=each %h){
$keys[$index]=$k;
$values[$index]=$v;
$index++;
}

sub quickSort{
my $temp;
for (my $i=0;$i<scalar(@values);$i++) {
for(my $j=$i+1;$j<scalar(@values);$j++){
if($values[$j]>$values[$i]){
$temp=$values[$j];$values[$j]=$values[$i];$values

my @keys = sort { $h{$b} <=> $h{$a} } keys %h; #sort the hash table
上面的那一行就是排序的代码。程序如下:

#!/usr/perl/bin
use strict;
use Data::Dumper;
my %h=(
"Alex"=>24,
"Sam"=>25,
"Bob"=>30,
"Andy"=>11,
"Wills"=>35,
"Mary"=>16,
"Helen"=>24
);

print(Dumper(\%h)); # output original hash

my @keys = sort { $h{$b} <=> $h{$a} } keys %h; #sort the hash table
for (@keys){print "$_ -> $h{$_}\n"}

-------------------------------------------
另外,我没记错的话, 可以return一个这样的list:
return ($key, $value)
我倒没用过perl的oo特性,不过我想用class也可以的。