一、什么是Perl Hash
哈希是一種數(shù)據(jù)結(jié)構(gòu),和數(shù)組類似,可以將值存放到其中,或者從中取回值。但是,和數(shù)組不同的是,其索引不是數(shù)字,而是名字。也就是說,索引(這里,我們將它叫key)不是數(shù)字而是任意的唯一的字符串。
key可以是任意的字符串,你可以使用任何的字符串作為key,但它們是唯一的。
另一種思考hash 的方法是,把它看作一堆數(shù)據(jù)(a barrel of data),每一個(gè)數(shù)據(jù)都有一個(gè)相應(yīng)的標(biāo)簽??梢酝ㄟ^標(biāo)簽訪問此標(biāo)簽對應(yīng)的元素。但其中是沒有“第一個(gè)”元素的概念的。在數(shù)組中,數(shù)組元素從0,Perl學(xué)習(xí)之哈希hash_馬亮的計(jì)算機(jī)技術(shù)1,2 開始編號(hào)。但在hash中,沒有確定的順序,因此也沒有第一個(gè)元素。只是一些key/value 對的集合。
keys和values均為任意的標(biāo)量,但keys通常轉(zhuǎn)換為字符串。因此,如果將表達(dá)式50/20 作為keys,則其通常被轉(zhuǎn)換為3字符的字符串“2.5”。
由于Perl的“沒有不必要的限制”的設(shè)計(jì)哲學(xué):hash可以是任意大小,從空hash(沒有key/value對),到任何你內(nèi)存允許的大小。
keys是唯一的,但values可以重復(fù)。hash的value可以是數(shù)字,字符串,undef,或者它們的混合,但key是唯一的。
為什么使用Perl Hash
可以把hash看作一個(gè)簡單的數(shù)據(jù)庫,其中每一個(gè)key下面可以有一塊數(shù)據(jù)。如果你的任務(wù)是關(guān)于:“查詢重復(fù)的”,“唯一的”,“交叉引用的”,“查詢表”,則hash很可能在這類應(yīng)用中幫上Perl學(xué)習(xí)之哈希hash_馬亮的計(jì)算機(jī)技術(shù)你的忙。
二、Perl Hash元素的存取
要訪問hash 元素,可以使用下面的語法:$hash{$some_key}
這和訪問數(shù)組元素的方法有些類似,這里下標(biāo)(key)上使用的是花括號(hào)({}),而不是方括號(hào)([ ])?,F(xiàn)在key 的表達(dá)式是字符串,而非數(shù)字。
hash的名字和Perl中其它的標(biāo)識(shí)符的命名規(guī)則是一樣的(字母,數(shù)字,下劃線組成,但不能由數(shù)字開頭)。
訪問不存在的hash元素將得到undef。
1.作為整體的Perl Hash
要引用整個(gè)hash,使用百分號(hào)(%)作為前綴。
為了方便,hash可以轉(zhuǎn)換為列表,或者反過來。
2.Perl Hash賦值
可以使用如下的語法在hash 之間拷貝:
%new_hash = %old_hash;
將hash轉(zhuǎn)變成其它形式更加常見。例如,我們可以將hash反轉(zhuǎn):
%inverse_hash = reverse %any_hash;
3.大箭頭符號(hào)(=>)
當(dāng)給hash賦值時(shí),有時(shí)并不明顯哪些元素是keys,那些是values,因此發(fā)明了大箭頭符號(hào)(=>)。在需要逗號(hào)的時(shí)候,都可以使用大箭頭符號(hào)替換。
如:
代碼如下:
my %last_name = (
"www" => 1,
"eee" => 2,
);
三、Perl Hash函數(shù)
某些有用的函數(shù)可以對整個(gè)hash 進(jìn)行操作。
1.keys和values函數(shù)
keys函數(shù)會(huì)返回此hash的所有keys,values函數(shù)將返回所有的values。如果hash中沒有元素,則此函數(shù)將返回空列表。
新聞熱點(diǎn)
疑難解答
圖片精選