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

本文介绍了Perl编程中数组内嵌哈希的定义、使用方法及遍历技巧,通过具体实例展示了如何利用数组内嵌哈希进行数据存储与访问,并实现特定任务的自动化处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:本神奇的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 };#数量

 

1          

2          

3          

4          

5          

6          

7          

同事小王是某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,找到成员数最多的城市,即找到最大键值对应的键名。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值