Chinaunix首页 | 论坛 | 博客
  • 博客访问: 692492
  • 博文数量: 108
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1436
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-31 09:49
文章分类
文章存档

2019年(16)

2015年(2)

2014年(20)

2013年(70)

我的朋友

分类: PERL

2014-02-26 15:30:03

数组与哈希的差别是:哈希是按照名字来访问它们的标量的,而不是像数组那样使用数字标号进行访问。
? 创建哈希结构。
? 将元素插入哈希结构和从哈希结构中删除元素。
? 使用哈希结构对数组进行操作。
7.1    将数据填入哈希结构
只有一个关键字的哈希结构并不特别有用。若要将若干个值放入一个哈希结构,可以使
用一系列的赋值语句,如下面的代码所示:
$food{'apple'}='fruit';
$food{'pear'}='fruit';
$food{'carrot'}='vegetable';
若要使这个代码变得短一些,可以用一个列表对该哈希结构进行初始化。该列表应该包
含成对的关键字与值,如下所示:
$food=('apple','fruit','pear','fruit',‘carrot’,'vegetable');

当你对哈希结构进行初始化时,要想跟踪大型列表中的哪些项目是关键字,哪些项目是
值,这是很容易搞混的。 P e r l有一个特殊的运算符,称为逗号箭头运算符,即 = >。使用= >运
算符,同时利用P e r l忽略白空间的特性,就能够编写下面这样的哈希结构的初始化代码:
%food=('apple' => 'fruit',
            'pear' => 'fruit',
            ‘carrot’ => 'vegetable',
);
可以使用两个辅助的快捷方式来进行哈希结构的初始化 。= >运算符的左边将是个简单的
字符串,不需要用引号括起来。另外,花括号中的单个单词的哈希关键字会自动加上引号。
因此,前面显示的初始化代码将变成下面的形式:
%food=(apple => 'fruit',pear => 'fruit', carrot => 'vegetable');

7.2从哈希结构中取出数据
若要从哈希结构中取出单个元素,只需要使用一个 $、哈希结构的名字和你想要检索的关
键字。请看下面这个例子:
[root@shangxiantongbu script]# cat haxi1.pl
#!/usr/bin/perl
%movie=(apple=>'fruit',pear=>'fruitt',carror=>'vegetable');
print "$movie{'apple'}\n";
[root@shangxiantongbu script]# ./haxi1.pl
fruit

可以使用k e y s函数来检索作为列表返回的哈希结构的所有关键字,然后可以查看该列表,
找出哈希结构的所有元素。在哈希结构的内部,它的关键字并不按照特定的顺序进行存放,
k e y s函数返回的关键字也不使用特定的顺序。若要输出该哈希结构中的所有电影名字,可以
使用下面的代码:
[root@shangxiantongbu script]# cat haxi2.pl
#!/usr/bin/perl
%movie=(apple=>'fruit',pear=>'fruitt',carror=>'vegetable');
foreach $shuiguo (keys %movie) {
        print "$shuiguo\n";
}
[root@shangxiantongbu script]# ./haxi2.pl
apple
carror
pear

这里,$ f i l m使用keys %Movies返回的列表的每个元素的值。如果除了电影的名字外,还
想输出所有导演的名字,那么可以输入下面的代码:

[root@shangxiantongbu script]# cat haxi3.pl
#!/usr/bin/perl
%movie=(apple=>'fruit',pear=>'fruitt',carror=>'vegetable');
foreach $shuiguo (keys %movie) {
        print "$shuiguo shi shuyu BY $movie{$shuiguo}.\n";
}
[root@shangxiantongbu script]# ./haxi3.pl
apple shi shuyu BY fruit.
carror shi shuyu BY vegetable.
pear shi shuyu BY fruitt.


7.3列表与哈希结构
每当哈希结构用于列表环境中时, P e r l会将哈希结构重新变为由关键字和值组成的普通
列表。该列表可以被赋予数组,这与其他任何列表的情况是一样的,如下所示:
[root@shangxiantongbu script]# cat haxi4.pl
#!/usr/bin/perl
%movie=('HERO'=>'zhangyimou','bawang bie jie!!'=>'chenkaige','rangzidan feo yihuier'=>'jiangwen');
@data=%movie;
print "@data\n";
[root@shangxiantongbu script]# ./haxi4.pl
HERO zhangyimou rangzidan feo yihuier jiangwen bawang bie jie!! chenkaige

就其他方面来说,数组与哈希结构是相似的。若要拷贝一个哈希结构,只需要像下面这
样将这个哈希结构赋予另一个哈希结构即可:
%new_hash=%old_hash

%Both=(%First,%Second);
%Additional=(%Both,key=>'value1',key2=>'value2');
其中咧,上面代码中的第一行将两个哈希结构 % F i r s t和% S e c o n d组合成第三个哈希结构% B o t h。对
于这个例子,你应该记住的是,如果 % F i r s t的有些关键字也出现在% S e c o n d中,那么第二次出
现的关键字值对就取代% B o t h中的第一个关键字值对。在第二行代码中, % B o t h显示为一个放
在括号中的关键字值对的列表,另外两个关键字值对也放在括号中。然后整个列表用于
对% A d d i t i o n a l进行初始化。

7.4关于哈希结构的补充说明

阅读(1598) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~