2007-09-19

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

来源: 开发者在线 作者: 评论 0 条
 

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

定义哈希

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

列表 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 ";


共2页: 上一页 1 [2] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:“乡乡有网站”助推农村信息化  
下一篇:黄金流量破解网络广告数量与质量的两难
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号