把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 展开
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 展开
1个回答
展开全部
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也可以的。
上面的那一行就是排序的代码。程序如下:
#!/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也可以的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询