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,
);
哈希函数
很自然,围绕哈希有很多有用的函数。
keys和values
keys函数能返回哈希的键列表,而values函数能返回值列表。如果哈希没有任何成员,则两个函数都返回空列表。
each函数
如果需要罗列哈希的每个键/值对,觉见的写法就是使用each函数,它能用两个元素的列表形式返回键/值对。每次对同一个哈希调用此函数,它就会返回下一组键/值对,直到所有的元素都被访问过。
在标量上下文中,列表赋值运算的值是源列表中元素的个数。
哈希的典型应用
exists函数
检查哈希中是否有某个键,可以使用exists函数,它能返回真或假,分别表示键存在与否,和键对应的值无关。
delete函数
delete函数能从哈希中删除指定的键及其相对应的值。
哈希值内插
%ENV哈希