Chinaunix首页 | 论坛 | 博客
  • 博客访问: 131355
  • 博文数量: 21
  • 博客积分: 576
  • 博客等级: 中士
  • 技术积分: 319
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-23 16:19
个人简介

没评论

文章分类

全部博文(21)

文章存档

2013年(1)

2012年(20)

我的朋友

分类: Python/Ruby

2012-06-05 15:12:21

什么是哈希
所谓哈希就是一种数据结构,和数组的相同之处在于:可以容纳很多值(没有上限),并能随机存取。区别在于:数组以数字来检索,而哈希以名字来检索。

哈希的访问
$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}中存取。

阅读(914) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~