神奇的Perl-哈希与数组(4)
声明:本神奇的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,找到成员数最多的城市,即找到最大键值对应的键名。
上一篇: perl处理输入和输出-3
下一篇: 神奇的Perl-哈希与数组(2)