# 初始化 %h为空数组%h = {};# 用数组初始化%h为 a=>1, b=>2%h = ('a', 1, 'b', 2);# 意义同上,只是另一种更形象化的写法。%h = ('a'=>1, 'b'=>2);
#如果key是字符串,可以省略引号。下面这行和上面那行是一样的
%h = (a=>1, b=>2);所以当数字做为key时,可以用$h{1} 或 $h{'1'};
这些keys 可以是任意的字符串,你可以使用任何的字符串作为key。但,它们是唯一的;就像数组中只有一个元素的索引。keys 是唯一的,但values 可以重复。hash 的value 可以是数字,字符串,undef,或者它们的混合◆,但key 是唯一的。
- #!/usr/bin/perl
-
-
%family_name = ("hong", "liu", "fang", "chen", "gang", "lu");
-
@names = %family_name;
-
-
my %last_name = (
-
"fred" => "flintstone",
-
"dino" => undef,
-
"barney" => 'rubble',
-
"betty" => "rubble",
-
);
-
-
@last = %last_name;
-
print "@names \n @last\n";
@names
= %family_name 很容易的将hash转为列表。
keys 函数会返回此hash 的所有keys,values 函数将返回所有的values。如果hash 中没有元素,则此函数将返回空列表:
- my %hash = ('a' => 1, 'b' => 2, "c" => 3);
-
my @k = keys %hash;
-
my @v = values %hash;
-
-
%h = reverse %hash;
-
my @ks = keys %h;
-
-
print "@k\n@v\n @ks\n";
,
Perl 并不维护hash 中元素的顺序。但,其中keys按照某种顺序存储,则其对应的values 也是这个顺序my $count = keys %hash; #得到3,是指有3 个key/value 对如果想迭代hash 的每一个元素(如,检查每一个元素),一种通常的方法是使用each 函数,它将返回key/value 对的2元素列表。实践中,一般只在while 循环中使用each:
- while(($key,$value) = each %hash){
-
print "$key => $value";
-
}
上述方法得到的key/value是无序的,要想得到有序的可以:
- foreach $key (sort keys %hash){
-
$value = $hash{$key};
-
print "$key => $value\n";
-
}
$hash{"a"}得到 key a 对应的value;
要查看hash 中是否存在某个key(某人是否有借书卡),可以使用exists 函数,如果hash 中存在此key,则返回true,这和是否有对应的value 无关
- if(exists $hash{"a"}){
-
print "yes\n";
-
}
delete 函数将某个给定的key(包括其对应的value)从hash 中删除。(如果不存在这个key,则什么也不做;不会有警告或者错误信息。)
my $person = “betty”;
delete $books{$person}; #将$person 的借书卡删除掉
这和hash 中存储的为undef 是不同的。使用exists($books{“betty”})将给出相反的结果。使用delete 后,hash 中将不会存在
此key
阅读(407) | 评论(0) | 转发(0) |