【初学小骆驼】哈希

Hash

哈希类似于数组有不同于数组。哈希可以容纳很多值,并随机存取,但是哈希用名字来检索,名字是要保证唯一的字符串。

假如以数字表达式50/20为键,它就被转换成一个含有三个字符的字符串“2.5”。

键值对 key/value

key是唯一的,value可以重复。

 

访问哈希元素

$hash{$some_key}

例如:$family_name{"fred"}="flintstone";

      $family_name{"barney"}="rubble";

 

哈希变量的命名和其他perl的标示符相似,可以有字母、数字和下划线。

挑选名字的时候最好使的哈希名和键之间能放下一个for,比如family_name for fred是flintstone。

倘若名称之前有一个美元符号而之后紧跟着花括号,那么此处访问的是哈希。

 

哈希元素会因赋值而诞生,访问不存在的值会得到undef。

 

访问整个哈希,可以用百分号%作为前缀。例如:%family_name

用列表形式对哈希赋值:%hash=("foo",1,"ab",2,"cd",3,"de","dedd\n");key,value,key,value,key,value……

将哈希赋给列表,哈希会变成key/value对。@array=%hash,这也叫做哈希松绑。

 

哈希赋值

%new_hash=%old_hash;这种形式将对old_hash进行松绑变列表,然后将列表重新构造键值对赋给new_hash。

%new_hash-reverse %old_hash;反转哈希,导致键值互换。当值有重复时,反转的哈希中变成键的值会有覆盖。

 

胖箭头

my %last_name=(             #哈希可以是词法变量

  "fred" => "flintstone",

  "dino" => undef,

  "barney" => "rubble",

  "betty" => "rubble",       #整个列表以一个额外的逗号结尾

)

 

哈希函数

keys函数    返回哈希的键列表,没有为空列表。

values函数  返回哈希的值列表,没有为空列表。

例如,对于刚才的哈希%last_name:

my @k=keys %hash;            或者my $countk=keys %hash;    #得到4,有四对键值

my @v=values %hash;          或者my $countv=values %hash;  #同理

each函数  用两个元素的列表形式返回键值对,每次对同一个哈希调用此函数,它都会返回下一组键值对,直到所有元素都被访问过,each返回空列表。

while (($key,$value)=each %hash){

  print "$key => $value\n";

}

sort函数  对键排序

foreach $key (sort keys %hash){

  $value=$hash{$keys};

  print "$key => $value\n"; #或者print "$key => $hash{$key}\n";

}

exists函数  检查哈希中是否有某个键,返回真存在,假不存在,和键对应的值无关。

if  (exists $books{"dino"}){

  print "Hey,here is a library card for dino!\n";

}

delete函数  删除指定的键和相应的值,加入本来就不存在,直接结束,不返回警告或者错误。

my $person="betty";

delete $books{$person};

哈希内插

foreach $person (sort keys %books){                #按次序访问每位借阅者

  if ($books{$person}){

    print "$person has $books{$person} items\n";   #fred借了3本书

    }

}

 

%ENV哈希  从%ENV中存取PATH键的值

print "PATH is $ENV{PATH}\n";

 

哈希典型应用

按名字查找姓

用主机名找IP地址

用IP地址找主机

统计单词出现次数

按用户名统计每个人使用的磁盘数量

按驾驶执照号找出姓名

posted on 2012-06-21 11:55  雨宫凉  阅读(199)  评论(0)    收藏  举报

导航