哈希在perl裏是很重要的數據結構,現在想想定義三種變量:
1,標量,就是c中的變量:$name
2,列表,就是數組:@list
3,哈希,形式上就是c中的map:%hash
1.1.定義
如果Perl 只有3 個key/value 對,它的速度很快。當擁有3 百萬key/value 對時,其速度仍非常快。大的hash 表,對性能不會有什麼影響。
特點:
1. 當將某個值存儲在已經存在的hash 元素中,以前的值會被覆蓋
2. 如果沒有存放值,則其返回undef。
#! /usr/bin/perl
use strict ;
use warnings ;
#聲明
my %family_name;
$family_name{"xiaowei"} = "huang";
$family_name{"jialin"} = "wang";
$family_name{"areu"} = "who";
#初始化
my %color = ("red"=>1 , "yellow"=>2,"black"=>3 ) ;
1.2.函數
#hash function
1.2.1. keys,values
my @hashks = keys%color ; #返回所有的key
my @hashvs = values %color ; #返回所有的value
在標量context 中,這些函數返回hash 中元素的個數(key/value)。此類操作不需要訪問hash 的每一個元素,其效率是很高。
my $size = keys %color ; #得到3,是指有3 個key/value 對
1.2.2. each 函數
迭代hash 的每一個元素(如,檢查每一個元素),一種通常的方法是使用each 函數,它將返回key/value 對的2元素列表。
實踐中,一般只在while 循環中使用each:
while (($key, $value) = each %hash){
print “$key => $value\n”;
}
#有序輸出
foreach my $key (sort keys %color)
{
print "$key=>",$color{"$key"},"\n";
}
1.2.3. exists 函數
要查看hash 中是否存在某個key,可以使用exists 函數,如果hash 中存在此key,則返回true,這和是否有對應的value 無關:
if(exists $books{$dino}){
rint “Hey, there’s a libaray card for dino!\n”;
}
1.2.4. delete 函數
delete 函數將某個給定的key(包括其對應的value)從hash 中刪除。(如果不存在這個key,則什麼也不做,會有警告或者錯誤信息。)
my $person = “betty”;
delete $books{$person};
1.3.常用法