標籤:
Perl中的雜湊資料結構。
雜湊是一種資料結構,由一對對的鍵(keys)--值(values)對來組成。
這些鍵和值都是任意的標量,但鍵總會被轉換成字串而且必須是唯一的字串。
訪問雜湊元素, $hash{$some_key} ##和訪問數組的做法類似,只是使用了花括弧{}而非方括弧[]。
訪問雜湊表中不存在的值得到undef。
$family_name{‘barney‘} = ‘rubble‘ ##完成對某一雜湊元素的單一賦值
訪問整個雜湊, %family_name ##此時雜湊被轉換成列表,列表中的元素為鍵--值對。
%family_name = (‘foo‘, 35, ‘bar‘, 12.4);
my %new_hash = %old_hash ##整個hash的賦值,會先將hash分解為索引值對,
後在將索引值對合并為hash。所以前後順序可能改變。
還可以將hash寫為如下的方式來進行賦值 my %last_name = (
‘fred‘ => ‘flintstone‘,
‘dino‘ => undef
);
=>稱為胖箭頭,來顯式的指出其中的索引值對,其中鍵的‘‘可以省略。 $score{‘fred‘}也可以直接簡寫為$score{fred}。
雜湊中的函數。
keys和values分別返回hash中的鍵列表和值列表。my @k = keys %hash; my @v=values %hash;
在標量上下文中,分別返回鍵元素和值元素的個數。
if(%hash) {print "....";} ##在標量上下文,只要hash中有至少一個索引值對,就返回真。
each函數,從雜湊中返回一組索引值。
while ( ($key, $value) = each %hash ) {print "....";} ##在while中時標量上下文,返回2或0.
exists函數,檢查雜湊中是否存在某個鍵。
if (exists $book{"dino"}) {print "....";}
delete函數,刪除雜湊中的某個索引值,不是賦值undef,而是直接刪除。
delete $books{$person};
不可以在雙引號內,直接插入整個hash。
foreach $persons (sort keys $books)
if( $books($persons) ) {print "$person has $books{persons}";} ##只可以這樣完成單個雜湊的插入
Perl中的駱駝精神