技術(shù)分享 利用Perl哈希表建立鍵-值數(shù)據(jù)映射
本文和大家重點(diǎn)討論一下利用Perl哈希表建立鍵-值數(shù)據(jù)映射問(wèn)題,這里告訴你如何創(chuàng)建Perl哈希表,如何插入、刪除要素,以及如何創(chuàng)建嵌套PerlPerl哈希表和利用循環(huán)來(lái)處理Perl哈希表。
Perl基礎(chǔ):利用Perl哈希表建立鍵-值數(shù)據(jù)映射
Perl的數(shù)據(jù)結(jié)構(gòu)中最有趣的一個(gè)特性是Perl哈希表(hash),它使得在數(shù)據(jù)片段之間建立鍵—值(key-value)關(guān)聯(lián)成為可能。雖然這些Perl哈希表要遠(yuǎn)遠(yuǎn)比普通系統(tǒng)中以數(shù)字索引的數(shù)組用途更廣,但是往往也會(huì)使初學(xué)者不知所措。這就是要寫本篇文章的原因所在——它將告訴你如何創(chuàng)建Perl哈希表,如何插入、刪除要素,以及如何創(chuàng)建嵌套PerlPerl哈希表和利用循環(huán)來(lái)處理Perl哈希表。
定義Perl哈希表
首先,什么是Perl哈希表?從本質(zhì)上來(lái)說(shuō),它是以字符串索引的數(shù)組。也就是說(shuō),你要使用字符串標(biāo)簽而不用數(shù)字來(lái)存取各個(gè)元素。下面是一個(gè)例子:
列表A
- #!/usr/bin/Perl
- #definehash
- %alphabet=('a'=>'apple',
- 'b'=>'ball',
- 'c'=>'cat',
- 'x'=>'xylophone');
上面的幾行用四對(duì)鍵—值關(guān)聯(lián)建立了一組PerlPerl哈希表。可以注意到,變量名前面的符號(hào)%表示它是一個(gè)Perl哈希表,箭頭用來(lái)指出鍵—值關(guān)系。
你也可以這樣寫代碼:
列表B
- #!/usr/bin/Perl
- #definehash
- %alphabet=('a','apple','b','ball','c','cat','x','xylophone');
在定義了一個(gè)Perl哈希表以后,你就可以用定義后的名稱對(duì)獨(dú)立的要素進(jìn)行存取。例如,看下面的代碼:
列表C
- #!/usr/bin/Perl
- #definehash
- %alphabet=('a','apple','b','ball','c','cat','x','xylophone');
- #accesshashvalue
- print"Aisfor".$alphabet;
輸出結(jié)果為:
Aisforapple.
要清除Perl哈希表,只需簡(jiǎn)單地把它賦值于一個(gè)空的數(shù)據(jù)集,就像下面的例子:
列表D
- #!/usr/bin/Perl
- #(re)initializehash
- %alphabet=();
插入、改變和刪除Perl哈希表元素
你可以在一個(gè)Perl哈希表中插入一個(gè)新元素(或者更改一個(gè)現(xiàn)有的Perl哈希表),只需要給與之相對(duì)應(yīng)的鍵設(shè)置一個(gè)新的數(shù)值就行了。如果這個(gè)鍵不存在,它將會(huì)被創(chuàng)建。下面是一個(gè)例子:
列表E
- #!/usr/bin/Perl
- #definehash
- %alphabet=('a','apple','b','ball','c','cat','x','xylophone');
- #addnewelement
- $alphabet='dog';
- #changeexistingelement
- $alphabet='arrow';
- #accesshashvalue
- print"Aisfor".$alphabet;
你可以用delete()函數(shù)刪除一對(duì)鍵—值對(duì),就像下面這樣:
列表F
- #!/usr/bin/Perl
- #definehash
- %alphabet=('a','apple','b','ball','c','cat','x','xylophone');
- #deleteelement
- delete$alphabet;
#p#
檢索鍵和數(shù)值
如果你覺(jué)得一個(gè)Perl哈希表的鍵和數(shù)值有用,需要進(jìn)一步處理,Perl允許將其提取到單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中。你可以用函數(shù)keys()將一個(gè)Perl哈希表的鍵返回成為一個(gè)數(shù)字索引的數(shù)組。下面是一個(gè)例子:
列表G
- #!/bin/Perl
- #definehash
- %alphabet=('a'=>'apple','b'=>'bat','c'=>'cat');
- #getandprinthashkeys
- @keyskeys=keys(%alphabet);
- print"@keys";
或者,你可以用函數(shù)values()獲得一個(gè)具有Perl哈希表值的數(shù)組,如下:
列表H
- #!/bin/Perl
- #definehash
- %alphabet=('a'=>'apple','b'=>'bat','c'=>'cat');
- #getandprinthashvalues
- @vals=values(%alphabet);
- print"@v";
計(jì)算Perl哈希表的大小
計(jì)算Perl哈希表大小的最簡(jiǎn)單方法就是用上述的keys()函數(shù),將Perl哈希表中的鍵提取到一個(gè)數(shù)組中,然后檢索得到數(shù)組的大小,操作方法如下:
列表I
- #!/bin/Perl
- #definehash
- %alphabet=('a'=>'apple','b'=>'bat','c'=>'cat');
- #printnumberofhashelements
- print"Thehashhas".scalar(keys(%alphabet))."elements";
處理Perl哈希表元素
運(yùn)用while()循環(huán)處理一個(gè)Perl哈希表中的所有元素也比較容易。下面是一個(gè)簡(jiǎn)單的例子:
列表J
- #!/usr/bin/Perl
- #definehash
- %alphabet=('a','apple','b','ball','c','cat','x','xylophone');
- #loopoverhash
- while(($key,$value)=each(%alphabet)){
- print"$keyisfor$value";
- }
或者,用前面已經(jīng)討論過(guò)的for()循環(huán)和keys()函數(shù):
列表K
- #!/usr/bin/Perl
- #definehash
- %alphabet=('a','apple','b','ball','c','cat','x','xylophone');
- #loopoverhash
- for$k(keys(%alphabet)){
- print$k."isfor".$hash."";
- }
運(yùn)用嵌套的Perl哈希表
Perl也允許在一個(gè)Perl哈希表(或數(shù)組)中再嵌入一個(gè)Perl哈希表(或數(shù)組)。這樣就為構(gòu)建長(zhǎng)而復(fù)雜的數(shù)據(jù)結(jié)構(gòu)提供了很大的靈活性,下面是一個(gè)例子:
列表L
- #!/usr/bin/Perl
- %movies=(
- 'black'=>{'hero'=>'Batman','villain'=>'ThePenguin'},
- 'red'=>[{'hero'=>'Spiderman','villain'=>'GreenGoblin'},
- {'hero'=>'Superman','villain'=>'LexLuthor'}]
- );
- #retrieveandprintvalues
- print$movies."fights".$movies."";
- print$movies[1]."fights".$movies[1]."";
該代碼返回的結(jié)果是:
BatmanfightsThePenguin
SupermanfightsLexLuthor
【編輯推薦】
- Perl哈希表用法解析
- Perl語(yǔ)言中的五大變量類型
- 實(shí)例解析Perl守護(hù)進(jìn)程用法
- Perl模式匹配經(jīng)驗(yàn)總結(jié)
- Perl學(xué)習(xí)筆記 Perl變量的認(rèn)識(shí)