跳轉到內容

Perl 程式設計/雜湊變數

來自華夏公益教科書,開放的書籍,面向開放的世界
上一頁:陣列變數 索引 下一頁:引用和資料結構


Perl 雜湊類似於普通陣列,但它不使用整數索引,而是使用可以取任何標量值的“鍵”。這些通常是字串或數字。

語法:關聯陣列使用%符號而不是@運算子,並且不像$myarray[0]那樣使用方括號[],而是使用花括號{}引用雜湊元素,就像$myhash{"george"}一樣。

雜湊是 Perl 中最強大和最常用的功能之一。一個典型的用法是構建一個包含“字典”的雜湊,其中每個鍵都是字典中的一個詞,對應的值是這些詞的定義。

下面是一個包含各種家用寵物發出的聲音的雜湊

my %petsounds = ("cat" => "meow",
                 "dog" => "woof",
                 "snake" => "hiss");

'=>' 和 ','實際上是可互換的,所以右側看起來可能與陣列完全一樣。這意味著你可以將陣列分配給雜湊。在這樣的分配中,陣列中每個偶數索引(從 0 開始)的元素都成為雜湊中的一個鍵。以下語句建立與前面相同的雜湊

my @array = ("cat", "meow", "dog", "woof", "snake", "hiss");
my %petsounds = @array;

但第一種風格更受歡迎,因為它使語句更易讀。

要訪問雜湊元素,使用花括號

 print STDOUT "The cat goes " . $petsounds{"cat"} . ".\n";

將列印以下內容到 STDOUT

The cat goes meow.

要將新的聲音項新增到雜湊

$petsounds{"mouse"} = "squeak!";

要覆蓋現有元素,只需重新分配它

$petsounds{"dog"} = "arf!";  # The dog now goes "arf!"

要從雜湊中刪除項,使用delete. 將值設定為undef不會刪除該項;使用exists在已設定為undef的鍵上,仍然會返回 true。

delete($petsounds{"cat"});  # will remove "cat" from our hash

"關聯陣列"

[編輯 | 編輯原始碼]

最初,“雜湊”被稱為“關聯陣列”,但這個術語有點過時(人們只是厭倦了使用七個音節)。雖然對程式設計新手來說並不直觀,“雜湊”現在是首選術語。這個名字來源於計算機科學術語,雜湊表

使用雜湊

[編輯 | 編輯原始碼]

列印雜湊內容

[編輯 | 編輯原始碼]

如果你知道 PHP,你可能已經想到了用某種便捷的方式列印陣列內容,就像print_r所做的那樣...

use Data::Dumper;

print Dumper(\%hash);

計算雜湊中條目的數量

[編輯 | 編輯原始碼]

要獲取雜湊的大小,只需在標量上下文中計算keys函式的結果的大小

my %hash = (
   'key1' => 1,
   'key2' => 2
);

print "Hash has " . keys(%hash) . " elements\n";
my $num_elements = scalar(keys(%hash));

雜湊的雜湊的雜湊

[編輯 | 編輯原始碼]

你可以定義多維雜湊陣列變數。一個例子可能看起來像這樣

#!/usr/bin/perl

use Data::Dumper;

my %a=();

$a{1}{"a"}{"A"}="FIRST";
$a{1}{"c"}{"B"}="THIRD";
$a{1}{"b"}{"C"}="SECOND";

foreach my $k1 ( sort keys %a ) {
  foreach my $k2 ( sort keys %{$a{$k1}} ) {
    foreach my $k3 ( sort keys %{$a{$k1}{$k2}} ) {
      print "$k1\t$k2\t$k3\t$a{$k1}{$k2}{$k3}\n";
    }
  }
}

print Dumper(\%a);

這段程式碼將產生

 1       a       A       FIRST
 1       b       C       SECOND
 1       c       B       THIRD
 $VAR1 = {
           '1' => {
                    'c' => {
                             'B' => 'THIRD'
                           },
                    'a' => {
                             'A' => 'FIRST'
                           },
                    'b' => {
                             'C' => 'SECOND'
                           }
                  }
         };


上一頁:陣列變數 索引 下一頁:引用和資料結構
華夏公益教科書