欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神奇的Perl-哈希与数组(4)

程序员文章站 2022-04-29 16:23:37
...

声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载

 

2.     数组内嵌哈希

声明及定义

my @数组变量名=(

{

 数组第1个元素的哈希键1=>

 数组第1个元素的哈希键2=>2,

 …..

数组第1个元素的 哈希键n=>n

},

{

 数组第2个元素的哈希键1=>

 数组第2个元素的哈希键2=>2,

 …..

 数组第2个元素的哈希键n=>n

}

….

{

 数组第n个元素的哈希键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 };#数量

 

2.     哈希的遍历

1          

2          

3          

4          

5          

6          

7          

7.1         第二个任务

同事小王是某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 BBS