频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发设计技术教程 -> 网站数据库开发教程 -> 利用Perl的哈希建立键-值数据映射

利用Perl的哈希建立键-值数据映射

作者:未知  来源:www.jz123.cn  发布时间:2007-9-20 10:59:14  发布人:圈圈

减小字体 增大字体

Perl的数据结构中最有趣的一个特性是哈希(hash),它使得在数据片段之间建立键—值(key-value)关联成为可能。虽然这些哈希要远远比普通系统中以数字索引的数组用途更广,但是往往也会使初学者不知所措。这就是要写本篇文章的原因所在——它将告诉你如何创建Perl的哈希,如何插入、删除要素,以及如何创建嵌套哈希和利用循环来处理哈希。

定义哈希

首先,什么是哈希?从本质上来说,它是以字符串索引的数组。也就是说,你要使用字符串标签而不用数字来存取各个元素。下面是一个例子:

列表 A

#!/usr/bin/perl

# define hash
%alphabet = ('a' => 'apple',
             'b' => 'ball',
             'c' => 'cat',
             'x' => 'xylophone');

上面的几行用四对键—值关联建立了一组Perl 哈希。可以注意到,变量名前面的符号%表示它是一个哈希,箭头用来指出键—值关系。

你也可以这样写代码:

列表 B

#!/usr/bin/perl

# define hash
%alphabet = ('a', 'apple', 'b', 'ball', 'c', 'cat', 'x', 'xylophone');

在定义了一个哈希以后,你就可以用定义后的名称对独立的要素进行存取。例如,看下面的代码:

列表 C

#!/usr/bin/perl

# define hash
%alphabet = ('a', 'apple', 'b', 'ball', 'c', 'cat', 'x', 'xylophone');

# access hash value
print "A is for " . $alphabet;

输出结果为:

A is for apple.

要清除哈希,只需简单地把它赋值于一个空的数据集,就像下面的例子:

 

列表 D

#!/usr/bin/perl

# (re)initialize hash
%alphabet = ();

插入、改变和删除哈希元素

你可以在一个哈希中插入一个新元素(或者更改一个现有的哈希),只需要给与之相对应的键设置一个新的数值就行了。如果这个键不存在,它将会被创建。下面是一个例子:

列表 E

#!/usr/bin/perl

# define hash
%alphabet = ('a', 'apple', 'b', 'ball', 'c', 'cat', 'x', 'xylophone');

# add new element
$alphabet = 'dog';

# change existing element
$alphabet = 'arrow';

# access hash value
print "A is for " . $alphabet;

你可以用delete()函数删除一对键—值对,就像下面这样:

列表 F

#!/usr/bin/perl

# define hash
%alphabet = ('a', 'apple', 'b', 'ball', 'c', 'cat', 'x', 'xylophone');

# delete element
delete $alphabet;

检索键和数值

如果你觉得一个哈希的键和数值有用,需要进一步处理,Perl允许将其提取到单独的数据结构中。你可以用函数keys()将一个哈希的键返回成为一个数字索引的数组。下面是一个例子:

列表 G

#!/bin/perl

# define hash
%alphabet = ('a' => 'apple', 'b' => 'bat', 'c' => 'cat');

# get and print hash keys
@keys = keys(%alphabet);
print "@keys ";

或者,你可以用函数values()获得一个具有哈希值的数组,如下:

列表H

#!/bin/perl

# define hash
%alphabet = ('a' => 'apple', 'b' => 'bat', 'c' => 'cat');

# get and print hash values
@vals = values(%alphabet);
print "@v ";

计算哈希的大小

计算哈希大小的最简单方法就是用上述的keys()函数,将哈希中的键提取到一个数组中,然后检索得到数组的大小,操作方法如下:

列表 I

#!/bin/perl

# define hash
%alphabet = ('a' => 'apple', 'b' => 'bat', 'c' => 'cat');

# print number of hash elements
print "The hash has " . scalar(keys(%alphabet)) . " elements ";

处理哈希元素

运用while()循环处理一个哈希中的所有元素也比较容易。下面是一个简单的例子:

列表 J

#!/usr/bin/perl

# define hash
%alphabet = ('a', 'apple', 'b', 'ball', 'c', 'cat', 'x', 'xylophone');

# loop over hash
while (($key, $value) = each(%alphabet) ) {
        print "$key is for $value ";
}

或者,用前面已经讨论过的for()循环和keys()函数:

列表 K

#!/usr/bin/perl

# define hash
%alphabet = ('a', 'apple', 'b', 'ball', 'c', 'cat', 'x', 'xylophone');

# loop over hash
for $k (keys(%alphabet)) {
        print $k . " is for " . $hash . " ";
}

运用嵌套的哈希

Perl 也允许在一个哈希(或数组)中再嵌入一个哈希(或数组)。这样就为构建长而复杂的数据结构提供了很大的灵活性,下面是一个例子:

列表 L

#!/usr/bin/perl

%movies = (
   'black' => {'hero' => 'Batman', 'villain' => 'The Penguin'},
   'red'   => [{'hero' => 'Spiderman', 'villain' => 'Green Goblin'},
               {'hero' => 'Superman', 'villain' => 'LexLuthor'}]
);

# retrieve and print values
print $movies . " fights " .  $movies . " ";

print $movies[1] . " fights " .  $movies[1] . " ";

该代码返回的结果是:

Batman fights The Penguin
Superman fights LexLuthor

这些基本上就是所有你开始了解Perl中的哈希应该知道的。祝你玩的开心,回头见!


将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
下一篇文章:用Perl验证HTML代码
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· JScript 方法 - getYear..
· 最佳实践 ADO.NET实用经..
· DW-MX制作ASP.NET-链接与..
· Flash Action详解之变量..
· ASP技术在论坛中的运用。..
· 在 Visual Basic .NET 中..
· Microsoft 脚本编码器(1..
· 如何在ASP程序中使用Tel..
· 用PHP+MySql编写聊天室
· php分别做为cgi和module..
· 搜狗输入法推细胞词库 抢..
· 交叉表应用-成绩统计
· Flash中的鼠标绘画技巧(..
· 优秀ASP.NET程序员的修炼..
· 怎么秋实现输入拼音的按..
· 提高 Dreamweaver行为全..
相关文章
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号