Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5287435
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2008-11-16 23:32:21

我自己实现了一个算法。但是比较笨拙。不知道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;$ifor(my $j=$i+1;$jif($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;$indexprint " $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
 
 
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也可以的。
 
阅读(1583) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~