標籤:
雜湊
雜湊是一種資料結構,它和數組的相似之處在於可以容難任意多的值並能按需取用,而他和數組的不同在於索引的方式,數組是以數字為索引而雜湊則是以名字為索引。
雜湊的鍵是唯一的,雜湊的值可以重複。
雜湊的應用情境
舉例:
- 按名字找姓;
- 按主機名稱找IP地址或者按照IP地址找主機名稱;
- 按照單詞統計其出現次數;
- 按使用者名稱統計每個人使用的磁碟塊數量;
- 按照駕照號碼找出姓名。
訪問雜湊元素
如:$hash{$some_key} //注意使用的是大括弧{} 不是中括弧
賦值: $family_name{‘fred‘}=‘flintstone‘;
$family_name{‘barney‘}=‘rubble‘;
訪問整個雜湊
%some_hash=(‘foo‘,35,‘bar‘,12.4); // %<雜湊名>=(key,value,key,value......)
可以用下面代碼簡單查看:
my @k=keys %some_hash;//keys後面講解
foreach (@k)
{
print "$_=>$some_hash{$_}"."\n";
}
注意輸出順序可能是亂序。
@tmp_hash=%some_hash==>結果:tmp=foo 35 bar 12.4
雜湊賦值
my %new_hash=%old_hash;==>會為new_hash分配記憶體,然後將old_hash的值賦過去。並不是簡簡單單引用
my %inverse_hash=reverse %any_hash;
上面這個比較適用於:按主機名稱找IP地址或者按照IP地址找主機名稱
胖箭頭=>
主要目的是為了對下面這種模式的改善:%some_hash=(‘foo‘,35,‘bar‘,12.4);
如:my %some_hash=(
‘foo‘=>35,
‘bar‘=>12.4,
‘dnio‘=>undef,
);
注意:每一行的最後都有逗號.
雜湊函數
keys values
keys函數能返回雜湊的鍵列表,values函數能返回對應的值的列表。
如:my %hash=(‘a‘=>1,‘b‘=>2,‘c‘=>3,);
my @k=keys %hash;// 將會得到 a b c
my @v=values %hash;// 將會得到 1 2 3
如果使用: my $count=keys %hash;//將會得到3 也就是說hash有3對鍵
each函數
如果需要迭代整個雜湊,常見的用法就是用each函數.每次返回的就是hash表的鍵、值對。直到所有的元素都被訪問完。
如:while (($k,$v)=each %hash){
print "$k=>$v\n";
}
再比如:each返回鍵-值對的順序是亂序的,但它與keys和values返回的順序相同,也就是hash的自然順序。如果需要依次處理hash,則只需要對鍵排序就行
foreach $key(sort keys %hash){
$value=$hash{$key};
say "$key=>$value";
}
exists函數
檢查雜湊表中是否存在某個鍵。
if (exists $hash{‘foo‘}){
say "there is a foo";
}
delete函數
從雜湊中刪除指定的鍵和相對應的值。(總是成功)
my $person="betty";
delete $hash{$person};
%ENV雜湊
Perl程式既然運行在某個環境中,就需要對周圍的環境有所感知。Perl訪問這些環境資訊的方法就是訪問%ENV雜湊。如:
print "PATH is $ENV{PATH}";
perl學習筆記——雜湊