声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
2. 数组内嵌哈希
声明及定义
my @数组变量名=(
{
数组第1个元素的哈希键1=>值1 ,
数组第1个元素的哈希键2=>值2,
…..
数组第1个元素的 哈希键n=>值n
},
{
数组第2个元素的哈希键1=>值1 ,
数组第2个元素的哈希键2=>值2,
…..
数组第2个元素的哈希键n=>值n
}
….
{
数组第n个元素的哈希键1=>值1 ,
数组第n个元素的哈希键2=>值2,
…..
数组第n个元素的哈希键n=>值n
}
);
访问内嵌哈希的键值:
$数组变量名[数组下标]{哈希键}
例如,我们使用数组内嵌哈希来存储和访问某文具店的库存:
品名 | 价格 | 数量 |
钢笔 | 8.06 | 50 |
2B铅笔 | 2.10 | 300 |
胶水 | 5.80 | 60 |
剪刀 | 12.20 | 28 |
存储:
my @wenju=(
{name=>” 钢笔”,price=>8.06, amount =>50},
{name=>”2B铅笔”,price=>2.10,amont=>300},
{name=>” 胶水”,price=>5.80,amont=>60},
{name=>” 剪刀”,price=>12.20,amont=>28}
);
访问品名和数量:
print $wenju[2]{ name };#品名
print $wenju[2]{ amont };#数量
同事小王是某BBS驾游板块的版主,最近想在成员最多的城市组织聚会。小王将该版块发言成员信息导出为qqyou.txt文本文件,其中每行存放一位成员的信息,第一列是姓名,第二列是城市,每列以空格分隔,内容如下:
王兴 湛江
张华 深圳
李光 广州
王安 湛江
张美 深圳
张江美 深圳
胡海明 深圳
黄国刚 深圳
刘灿 湛江
李发 广州
哈希的遍历可通过while循环完成,每次循环从哈希变量中取出一对键值。语法如下:
while (( $键名,$键值)=each %哈希变量名){
#对取出的键名值进行操作
}
我们来完成第二个任务,代码如下:
#perl3-4.pl
use strict;
use warnings;
my %zjycity;
my $mycity;
my $cityinfo;
my $name;
my $city;
my $zjycity;
my $citycount;
my $pcount=0;
my @citys,;
open CITY,"<perl3-4.txt";
#从perl3-4.txt文件中读成员的姓名及城市信息
foreach $cityinfo(<CITY>){
($name,$city)=split(' ',$cityinfo);
$zjycity{$city}++;
}
#循环遍历哈希,并找到成员数最多的城市
while (($zjycity,$citycount)=each %zjycity){ #$zjycity为城市名,$citycount为成员数
if ($citycount>$pcount) {
$pcount=$citycount;
$mycity=$zjycity;
}
}
print "最佳聚会地点:$mycity\n" ;
以上代码中,%zjycity为哈希变量,首先从文本文件perl3-4.txt读取数据,并生成城市统计哈希%zjycity,键为城市名,键值为城市的成员数目,然后通过循环遍历哈希变量%zjycity,找到成员数最多的城市,即找到最大键值对应的键名。