6,雜湊(perl語言筆記)

tonykorn97發表於2007-06-21

1,何謂雜湊
雜湊式一種資料結構,和陣列相同之處:可以包含任意多個值,並能讓你隨心所欲地取用這些值;和陣列不同之處;陣列是以數字來編索引,而雜湊則是用名字來尋找相應的值。換句話說,雜湊的索引值(index),此處稱為鍵(key),並不是數值,而是互補相同的任意字串。

值得一提的是:雖然這些鍵互不相同,但是他們所對應的值卻可能重複。雜湊的值可能全部為數字,全部為字串,undef或是這些型別的混合,但是雜湊的鍵則全部是互補相同的任意字串。


2,訪問雜湊元素
要訪問雜湊元素,請使用如下的語法:
$hash($some_key)
這和訪問陣列的做法類似,但是我們會在索引值(雜湊鍵)旁邊使用花括號,而不是方括號。另外,鍵表示式(keyexpression)現在是字串,而不是數值;

$family_name{"fred"} = "astaire"; #填新值到已存在的元素
$bedrock = $family_name{"fred"}; #變成“astaire”,舊的值消失了

3,訪問整個雜湊
若要引用整個雜湊,請以百分比符號(%)開頭。
為了方便起見,雜湊可以被轉換成列表,反之亦然。對雜湊賦值等於在列表上下文中賦值,其中的列表則是由“鍵-值對”所組成。
%some_hash = ("foo",35,"bar",12.4,2.5,"hello","wilma",1.72e30,"betty",byen");
雜湊的值(在列表上下文中)則是簡單的“鍵-值對”列表;

4,雜湊的賦值運算
比較常見的做法是以某種方式轉換雜湊
%inverse_hash = reverse %any_hash;

5, 大箭號
將列表賦值到雜湊時,有時候哪個元素是鍵,那個元素是值並不怎麼明顯。我們可以透過大箭號(=>)來產生雜湊
my %last_name = ( #雜湊可以使詞法變數
"fred" => "flintstone",
"dino" => undef,
"barney" => "rubble",
"betty" => "rubble",
};

6, 雜湊函式
keys和values函式
keys函式會返回當前雜湊中所有的鍵,而values函式返回的則是相應的每個值。

7,each函式
假設你想對整個雜湊進行迭代,使用each函式時常見的做法。此函式會返回含有兩個元素的列表,也就是“鍵-值對”。之後每次對同一的雜湊呼叫each時,它會返回下一組“鍵-值對”,直到所有的元素都被訪問到。在沒有更多的"鍵-值對"時,each會返回空列表.
實際使用時,唯一適合使用each的地方時在while迴圈中,
while ( ($key,$value) = each %hash) {
print "$key => $valuen";
}

8, exists函式
要檢視某個鍵是否存在於雜湊中,請使用exists函式。假如雜湊中有這個鍵,它就會返回真值,無論相應的值是否為“真”
if (exists $books{"dino"}) {
print "Hey,there's a library card fro dino!n";
}
也就是說,如果“dino”出現在key %books所返回的鍵的列表中,exists $books{"dino"}才會返回真值。

9,delete函式
delete函式將會從列表移出你所指定的鍵(和相應的值)。假如沒有這樣的鍵,它就會直接結束,而不會出現任何警告或錯誤資訊
my $person = "betty";
delete $books{$person};

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245690/,如需轉載,請註明出處,否則將追究法律責任。

相關文章