《Perl语言入门》读书笔记(六)哈希

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";
    }
}