1.哈希特点
哈希是一种数据结构,与数组相同点,能容纳任意多的值;而哈希的检索方式与数组不同。数组是以数字下标检索,而哈希中的值(value)以唯一的名字(key)检索。
key-value一一对应:
乱序排列,类似一桶数据:
由于检索方式不同,当使用哈希时,能提高对大数据量中的读写性能。
2.哈希的使用
%some_hash = ('foo', 35, 'bar', 12.4, 2.5, 'hello', 'wilma' ,1.77878e12, 'da', "ada\n"); #创建一个哈希数组,以前key后value,一一对应
#改进版创建哈希
my %last_name = (
'fred' => 'filtstone', # '=>'等效于‘,’,更能区分key与value
'betty' => 'rubble',
'dino' => undef,
);
$hash{$some_key}; #访问哈希中的元素
@any_array = %some_hash; #以无序形式返回键-值对应的列表,key与它对应的value相邻
3.哈希操作函数
3.1 keys和values函数
keys函数能返回哈希的键列表,values函数能返回对应的值列表。
my %hash = ('foo', 35, 'bar', 12.4, 2.5, 'hello', 'wilma' ,1.77878e12, 'da', "ada\n");
my @k = keys %hash; #返回值包含所有奇数位置的key
my @v = values %hash;#返回所有偶数位置的value,返回顺序不固定,但key与value的相对位置保持一致
3.2 each函数
each函数能遍历哈希中的每个键-值对,返回两个元素,一个是键名,一个是值。
while (($key,$value) = each %hash){
print"$key => $value\n";
}
3.3 exists函数
若要检查哈希中是否存在某个键,可以使用exists函数检查,键存在就会发返回真,键不存在返回假,与值无关。
if (exists $books{"dino"}){
print"Hey,there's a library card for dino!\n";
}
3.4 delete函数
delete函数能从哈希中删除指定的键与对应的值。
my $person = "dada";
delete $book{$person}; #该键-值对被删除
3.5哈希元素内插
foreach $person (sort keys $books){
if($books{$person}){
print"$person has $books{$person} item\n";
}
}