Perl-哈希

上一篇 / 下一篇  2015-01-07 07:11:06 / 个人分类:Perl

哈希是一种数据结构,和数组的相似之处在于可以容纳任意多的值并能按需取用。而它和数组的不同在
于索引方式,数组是以数字来索引,哈希则以名字来索引。哈希的索引值,称为键,并不是数字,而是
任意唯一字符串。哈希的键是字符串,而且可以是任意的字符串,但是必须是唯一的字符串。哈希里没
有顺序,因此也没有所谓的第一个元素,有的只是一堆键值对的集合。键和值都是任意的标量,但键总
会被转换成字符串。哈希可以是任意大小的,空哈希到填满内存的巨大哈希,没有大小限制。虽然哈希
的键是唯一的,但它们对应的值是可以重复的,哈希的值可以是数字,字符串,undef,或是这些类型的
组合,但哈希的键必须全部是唯一的字符串。
为什么使用哈希?
需要将一组数据对应到另一组数据。可以将哈希当成极其简单的数据库,其中每个键的名下都只能存储
一块相应的数据,只要问题中带有找出重复,唯一,交叉引用,查表之类的字眼,就可能需要使用哈希。
访问哈希元素
$hash{$some_key} 使用花括号来表示索引值(数组使用方括号[]),并且键表达式是字符串而非数字。
哈希的键可以是任意的表达式,若对某个已存在的哈希元素赋值,就会覆盖之前的值。哈希元素也会因
赋值而诞生。访问哈希表里不存在的值会得到undef.
访问整个哈希
访问整个哈希,可以用百分号作为前缀(%).
哈希可以被转换成列表,反之,列表页可以被转换为哈希。对哈希赋值等同于在列表上下文中赋值,列
表中的元素应该为键值对,列表必须有偶数个元素。哈希转换成列表后,即使不知道某个键会出现在列
表的哪个位置,仍然可以确信相应的值会跟在键后面。
哈希赋值
my %new_hash=%old_hash
建立反序哈希
my %inverse_hash=reverse %any_hash
首先展开为键值对列表(key,value,key,value,key,value) 然后利用reverse的列表翻转功能形成
(value,key,value,key,value,key)的新列表。
如果哈希值中存在重复,则列表中最后的键会覆盖之前的键,因为哈希没有顺序,所以哪个值会被覆盖
是不可预知的,最后是在键值对唯一的情况下使用哈希反转。
胖箭头=>
在Perl中,胖箭头只是逗号的另一种写法,也就是说,任何需要逗号的地方都可以用胖箭头来替代,但
是主要是用在哈希中,比较容易区分键和值。使用胖箭头的时候可以省略键的引号,左边的部分会被自
动引起。 如果键的内容看起来像Perl的操作符的话,最好引起来。在花括号中检索特定键名的时候也可
以省略键名的引号。如果花括号内部是裸字,Perl就会将其当作表达式先求值,然后把结果当作键。
裸字: 
无需引号的字符序列称为裸字。                                                                
哈希函数
keys和values函数
在列表上下文中,keys函数返回哈希的键列表,values函数返回对应的值列表。如果哈希没有任何成员
,则两个函数都返回空列表。只要在使用这两个函数时不修改哈希, 这两个函数返回的键列表和值列表
的顺序是一致的。在标量上下文中,这两个函数都会返回哈希中元素(键值对)的个数。      
each函数 
each函数用来迭代整个哈希,它以包含两个元素的列表的形式返回键值对,每次对同一个哈希调用此函
数,它就会返回下一组键值对,直到所有的元素都被访问过,在没有任何新的键值对,each会返回空列
表。列表赋值在标量上下文中的求值结果为列表元素的个数,如果哈希返回键值对,则得到2,如果哈希返回
键值对为空列表,keyi, value 会得到under, 列   表的元素个数为0,                             
exist函数
检查哈希中是否存在某个键,可以使用exist函数,它能返回真或假,分别表示键存在与否,和键对应的
值无关。  
delete 函数
delete函数能从哈希中删除指定的键及其对应的值,假如没有这样的键,它就会直接结束,而不会出现
任何警告或错误信息。   
哈希元素内插
可以将单一哈希元素内插到双引号引起的字符串中。但这种方式不支持内插整个哈希。
%ENV哈希
%ENV哈希对应环境变量的键值对。                                                              

                                                                                            

                                                                                            

                                                                                         

TAG:

 

评分:0

我来说两句

Open Toolbar