Perl - 第七章 | Perl 哈希
哈希是 key/value 對的集合。
Perl 中哈希變量以百分號 (%) 標記開始。
訪問哈希元素格式:${key}。
以下是一個簡單的哈希範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | data{'J.J.'} = 45 |
建立哈希
哈希是通過以下兩種方式之一建立的。在第一種方法中,你要一個一個地為命名鍵分配一個值:
1 | $data{'J.J.'} = 45; |
在第二種情況下,你使用一個列表,該列表是通過從列表中的各個對中進行轉換的:該對中的第一個元素用作鍵,第二個元素用作值。例如:
1 | %data = ('J.J.', 45, 'Lisa', 30, 'Kumar', 40); |
為了清楚起見,你可以使用=>作為的別名,以指示鍵/值對,如下所示:
1 | %data = ('J.J.' => 45, 'Lisa' => 30, 'Kumar' => 40); |
這是上述形式的另一種形式,請看一下,這裡所有鍵前面都帶有連字符(-),並且在它們周圍都不需要引號:
1 | %data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40); |
但是需要特別注意的是,只有一個單詞,即沒有空格鍵以這種形式的散列形式使用,如果你以此方式建立散列,則只能使用連字符來訪問鍵,如下所示。
1 | $val = %data{-JohnPaul} |
訪問哈希元素
從哈希訪問單個元素時,必須在變量前加一個美元符號($),然後在變量名稱後的大括號內附加元素鍵。例如:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | 45 |
提取切片
你可以提取哈希的切片,就像可以從數組中提取切片一樣。你將需要對變量使用@前綴來存儲返回的值,因為它們將是值列表:
1 | #!/uer/bin/perl |
這將產生以下結果:
1 | Array : 45 30 |
提取 Key 和 Value
你可以使用keys函數從哈希表中獲取所有鍵的列表,該函數具有以下語法:
1 | keys %HASH |
此函數返回命名哈希的所有鍵的數組。以下是範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | Lisa |
同樣,你可以使用values函數來獲取所有值的列表。此函數具有以下語法:
1 | values %HASH |
此函數返回一個普通數組,其中包含命名哈希的所有值。以下是範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | 30 |
檢測元素是否存在
如果你在哈希中讀取不存在的 key/value 對 ,會返回 undefined 值,且在執行時會有警告提醒。
為了避免這種情況,我們可以使用 exists 函數來判斷key是否存在,存在的時候讀取:
1 | #!/usr/bin/perl |
在這裡,我們使用了IF … ELSE語句。現在你只是假設,如果(條件)只有當給定的條件為真,否則部分將被執行其他部分將會被執行。因此,當我們執行上述程序時,它會產生以下結果,因為此處存在給定條件($ data {‘Lisa’}返回true:
1 | Lisa is 30 years old |
獲取哈希大小
你可以通過使用鍵或值上的標量上下文來獲取大小-即哈希中元素的數量。簡單地說,首先你必須獲取鍵或值組成的數組,然後可以按如下所示獲取數組的大小:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | 1 - Hash size: is 3 |
在哈希中添加和刪除元素
使用簡單的賦值運算符,只需一行程式碼即可添加新的鍵/值對。但是要從哈希中刪除元素,你需要使用delete函數,如下面的範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | 1 - Hash size: is 3 |