什么是哈希
所谓哈希就是一种数据结构,和数组的相同之处在于:可以容纳很多值(没有上限),并能随机存取。区别在于:数组以数字来检索,而哈希以名字来检索。
哈希的访问
$hash{some_key}
这和数组的访问类似,只是使用了花括号代替了方括号,而且键表达式是字符串而不是数字。
可以用%hash来指代整个哈希。
可以用以下方式对哈希赋值:
%hash = (键,值,键,值...键,值);
也可以用以下的方式进行赋值:
%hash = (键 => 值,键 => 值,...键 => 值);
哈希松绑:@array = %hash;
哈希松绑后其顺序不一定和赋值顺序一致,但是键和值还是前后紧跟。
反转哈希:reverse %hash; #把哈希的键/值相互对调。
注意:反转哈希时,原先的哈希值应该是唯一的,否则会造成键/值丢失。
哈希函数
key函数能返回哈希的键列表,values函数能返回值列表。用法如下:
my %hash = ('a' => 1, 'b' => 2, 'c' => 3);
my @k = keys %hash;
my @v = values %hash;
在标量上下文中它们都会返回键/值对数。
each函数可以跟while循环一起使用来遍历哈希中的每个键/值对。用法示例如下:
while ( ($key, $value) = each %hash ) { #注1
print "$key => $value\n";
}
注1:布尔值为特殊的标量上下文,在标量上下文中对列表进行赋值后返回的值为列表成员数,在这里就是2(赋值成功)或者0(无赋值)。
exists函数用来检查哈希中是否有某个键,它返回真或假。示例如下:
if (exists $books{"dino"}) { #查看哈希books里面是否存在键dino
print "Hey, there's a library card for dino!\n";
}
delete函数可以删除指定键及其对应的值。用法示例:delete $books{$person};
哈希内插跟数组内插差不多,只是不支持整个哈希的内插。
%ENV哈希
perl程序把一些系统的环境信息存储在哈希%ENV中。如把PATH值在$ENV{PATH}中存取。
阅读(945) | 评论(0) | 转发(0) |