Perl Learning 5 Hash

來源:互聯網
上載者:User

標籤:hash   perl   

【本文原創,未經允許請勿轉載】

雜湊是一種資料結構,它和數組的相似之處在於可以容納任意多的值並能按需取用,而它和數組的不同在於索引方式,數組是以數字來索引,雜湊則以名字來索引。也就是說,雜湊的索引值,此處稱為鍵(key),並不是數字,而是任意唯一的字串。但它也必須是唯一的字串。

我們也可以這麼看待雜湊,試將它想象成一大桶資料,其中每個資料都有關聯的標籤。你可以伸手到桶裡任意取出一張標籤,看它上面附著的資料是什麼。但是桶裡沒有所謂的“第一個”元素,只有一堆資料。是鍵-值對的集合。

 

要訪問hash元素,需要使用如下文法:


這和訪問數組的做法類似,只是使用了花括弧而非方括弧來表示索引值(雜湊鍵),訪問雜湊表裡不存在的值會得到undef。



要指代整個雜湊,可以用百分比符號(%)作為首碼。雜湊可以被轉成列表,反之亦然。對雜湊賦值等同於在列表上下文中賦值,列表中的元素應該為鍵-值對。可以將雜湊表變成鍵-值對列表。當然,得到的鍵-值對不一定是按照當初賦值時的順序展開。因此選擇使用雜湊的場合,要麼元素儲存順序無關緊要,要麼可以容易地在元素輸出時進行排序。

 

雜湊賦值:


這會將%any_hash展開成為鍵-值對列表,看起來是(key,value,key,value,...)這樣。然後利用reverse的列表翻轉功能形成一個(value,key,value,key,...)這樣的新列表,鍵值達成互換。

在將列表賦值到雜湊時常常會發現列表中的鍵-值對並不容易區分。所以引進了胖箭頭 =>


當需要加入更多的資訊的時候,只要確保每行都有一組鍵-值對和結尾的逗號就行了。同時上面的代碼可以簡寫為:


當然,也不是所有情況都可以這麼做,因為hash的鍵可以是任意形式的字串,所以要是某個鍵的內容看起來是Perl的操作符的話,就會出問題。還有一個常見的允許省略鍵名引號的地方:在花括弧中檢索特定鍵名的元素。

雜湊函數:keys函數能夠返回雜湊的鍵列表,而values函數能返回對應的值列表。


結果:

abc的順序會有所不同,但是返回的鍵列表和值列表的順序是一致的。在標量上下文中,這兩個函數都會返回雜湊中元素(鍵-值對)的個數。這個計算過程不必對整個雜湊進行遍曆,因而非常高效。

 

如果需要迭代(逐項處理其中的每一個元素)整個雜湊,常見的寫法就是用each函數,它可以包含兩個元素的列表的形式返回鍵-值對。

結果:

當Perl執行each%hash卻已經沒有任何鍵-值對時,each會返回空列表。

如果需要依次按順序處理雜湊,只要對鍵排序就行了:


結果:

若要檢查雜湊中是否存在某個鍵,可以使用exists函數,它能返回真或假,分別表示鍵存在與否,和鍵對應的值無關。

Delete函數能從雜湊中刪除指定的鍵以及相對應的值。假如沒有這樣的鍵,它就會直接結束,而不會出現任何警告或者錯誤訊息。


這與“將undef存入雜湊元素”並不相同。在這兩種情況下,exists($book{“betty”})會得出相反的結果。在delete之後,鍵便不會出現在雜湊之中,但存入undef後,鍵卻是一定會存在的。

 

Perl程式既然運行在某個環境中,就需要對周圍的環境有所感知。Perl訪問這些資訊的方法是訪問%ENV雜湊。


結果:


習題:


第一題:

結果:

如果打算使用my來聲明雜湊,則必須在聲明之後才可以對元素進行賦值。My操作符智能聲明獨立的變數,不能用來聲明數組或者雜湊裡的元素。


第二題:

結果:

附加:

結果:

第一個foreach迴圈會逐項處理各個單詞。該迴圈中包含了整個程式裡最重要的一行,它會將$count{$word}的值加上1,然後再存回$count{$word}。

 

第三題:


結果如下:


本章節加深了我對Hash表的理解和使用。在之後的Perl編程中會好好分析每個$和%的用法。感覺自己還很年輕啊。





著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Perl Learning 5 Hash

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.