【初学小骆驼】哈希
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地址找主机
统计单词出现次数
按用户名统计每个人使用的磁盘数量
按驾驶执照号找出姓名
浙公网安备 33010602011771号