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

我自己实现了一个算法。但是比较笨拙。不知道perl有没有直接提供这个功能,即直接对hash进行排序。另外,我用两个数组分别存储keys和values。perl中有没有提供... 我自己实现了一个算法。但是比较笨拙。不知道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[$i]=$temp;
$temp=$keys[$j];$keys[$j]=$keys[$i];$keys[$i]=$temp;

}
}
}
}

quickSort();
for ($index=0;$index<scalar(@values);$index++) {
print " $keys[$index] \t --> $values[$index] \n";
}
-----------------------------------------------------------------
输出结果如下:
-----------------------------------------------------------------
$VAR1 = {
'Helen' => 24,
'Bob' => 30,
'Mary' => 16,
'Alex' => 24,
'Andy' => 11,
'Wills' => 35,
'Sam' => 25
};
Wills --> 35
Bob --> 30
Sam --> 25
Helen --> 24
Alex --> 24
Mary --> 16
Andy --> 11
展开
 我来答
uestcfb
2008-06-17 · TA获得超过1068个赞
知道小有建树答主
回答量:609
采纳率:0%
帮助的人:707万
展开全部
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也可以的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式