Chinaunix首页 | 论坛 | 博客
  • 博客访问: 342133
  • 博文数量: 122
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1191
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 11:12
文章分类

全部博文(122)

文章存档

2010年(122)

我的朋友

分类:

2010-07-19 15:14:58

第六章 哈希

什么是哈希?

       哈希就是一种数据结构。数组是以数字检索,哈希是以名字来检索。

       可以用任意字符串表达式作为哈希键。它们也必须是唯一的字符串。

访问哈希元素

       要访问哈希函数,需要使用如下语法:

       $hash($some_key)

       $family_name{“fred”}=”flintstone”;

       哈希有自己的名字空间。

       若对某个已存在的哈希元素赋值,就会覆盖之前的值。

       哈希元素会因赋值而诞生。

       访问哈希表里不存在的值会得到undef

       访问整个哈希

       要访问整个哈希,可以用百分号(%)作为前缀。

       为了方便起见,哈希可以被转换成列表,反过来也行。对哈希赋值会带来列表赋值的上下文,列表的元素应该是键/值对。

       #!/usr/bin/perl

%hash_table=("lyx",1,"lq",2,"njb",3);

print $hash_table{"lyx"},"\n";

@array=%hash_table;

print $array[0],"\n";

       哈希赋值

       %new_hash=%old_hash;

       反转哈希

       %inverse_hash=reverse %any_hash;

       键变成了值,值变成了键。只能在哈希值唯一的情况下才能奏效,否则会导致重复的键,而这对哈希是不可能的。对于这个问题Perl采用后发先至的原则,用列表最后的键覆盖之前的键。

       胖箭头

       为了方便区别,可以用胖舱箭头(=>)。

%hash_table=("lyx"=>1,

"lq"=>2,

"njb"=>3,

);

哈希函数

       很自然,围绕哈希有很多有用的函数。

       keysvalues

       keys函数能返回哈希的键列表,而values函数能返回值列表。如果哈希没有任何成员,则两个函数都返回空列表。

       each函数

       如果需要罗列哈希的每个键/值对,觉见的写法就是使用each函数,它能用两个元素的列表形式返回键/值对。每次对同一个哈希调用此函数,它就会返回下一组键/值对,直到所有的元素都被访问过。

       在标量上下文中,列表赋值运算的值是源列表中元素的个数。

哈希的典型应用

       exists函数

检查哈希中是否有某个键,可以使用exists函数,它能返回真或假,分别表示键存在与否,和键对应的值无关。

delete函数

       delete函数能从哈希中删除指定的键及其相对应的值。

       哈希值内插

%ENV哈希

      Perl程序既然运行在某个环境中,就需要对周围的影响有所感知。Perl获取这些信息的方法是存取%ENV哈希。
 
阅读(930) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~