當前位置:首頁 » Perl » Perl哈希

Perl哈希變量

Perl哈希變量,實例,使用例子教學:哈希是一種先進的數組形式

哈希是一種先進的數組形式。數組的限製之一是,它所包含的信息是很難獲得的。例如,想象一下,你有一個人的名單和他們的年齡.

哈希解決了這個問題,非常整齊,讓我們的訪問,不是由一個指數,而是由一個標量的關鍵,@ages數組。例如使用不同的人的年齡,我們可以使用他們的名字作為重點來定義一個哈希.

%ages = ('Martin' => 28,
         'Sharon' => 35,
         'Rikke' => 29,);

print "Rikke is $ages{Rikke} years old\n";

This will produce following result
Rikke is 29 years old

創建哈希

哈希創建兩種方式之一。在第一,你分配一個由一對一的基礎上,以一個名為鍵的值:

$ages{Martin} = 28;

在第二種情況下,你使用的名單,這是由個人對從列表轉換:對第一個元素被用作鍵和第二作為值。例如,

%hash = ('Fred' , 'Flintstone', 'Barney', 'Rubble');

為清楚起見,你可以使用=>一個彆名,表示鍵/值對:

%hash = ('Fred' => 'Flintstone',
         'Barney' => 'Rubble');

提取單個元素

你可以從散列中提取單個元素,通過指定為你想要的值,括號內的關鍵字:

print $hash{Fred};

This will print following result
Flintstone

提取切片

您可以提取哈希片,就像你可以從一個數組中提取切片。然而,你需要使用@前綴,因為返回值將是一個對應值的列表:

#!/uer/bin/perl

%hash = (-Fred => 'Flintstone', -Barney => 'Rubble');
print join("\n",@hash{-Fred,-Barney});

This will produce following result
Flintstone
Rubble

: 使用$hash{-Fred, -Barney} 將無任何返回.

提取鍵和值

你可以通過使用密鑰哈希鍵的列表:

#!/usr/bin/perl 

%ages = ('Martin' => 28, 'Sharon' => 35, 'Rikke' => 29);
print "The following are in the DB: ",join(', ',values %ages),"\n";

This will produce following result
The following are in the DB: 29, 28, 35

這些可以是有用的循環中,當你想打印所有哈希的內容:

#!/usr/bin/perl

%ages = ('Martin' => 28, 'Sharon' => 35, 'Rikke' => 29);
foreach $key (%ages)
{
  print "$key is $ages{$key} years  old\n";
}

This will produce following result  - www.gitbook.net
Rikke is 29 years  old
29 is  years  old
Martin is 28 years  old
28 is  years  old
Sharon is 35 years  old
35 is  years  old

這種方法的問題是,(%age)返回一個值的列表。因此,要解決這個問題,我們每個函數將返回鍵和值對,下麵將給出

#!/usr/bin/perl

%ages = ('Martin' => 28, 'Sharon' => 35, 'Rikke' => 29);
while (($key, $value) = each %ages)
{
  print "$key is $ages{$key} years old\n";
}

This will produce following result
Rikke is 29 years old
Martin is 28 years old
Sharon is 35 years old

檢測存在

如果你嘗試訪問哈希未含存在的鍵/值對,你通常未定義的值,如果你有開啟的警告,然後你在運行時產生的警告。通過使用存在的函數,返回true,如果存在命名的鍵,不論它的價值可能是什麼,你可以解決這個問題:

#!/usr/bin/perl

%ages = ('Martin' => 28, 'Sharon' => 35, 'Rikke' => 29);
if (exists($ages{"mohammad"}))
{
  print "mohammad if $ages{$name} years old\n";
}
else
{
  print "I don't know the age of mohammad\n - by www.gitbook.net";
}

This will produce following result
I don't know the age of mohammad

排序/排列哈希

冇有辦法簡單地保證鍵,值,或鍵/值對列表的順序將永遠是相同的。事實上,它不是最好的甚至要依靠計算兩個連續之間的順序:

#!/usr/bin/perl

print(join(', ',keys %hash),"\n");
print(join(', ',keys %hash),"\n");

如果你想保證順序,使用排序,例如:

  print(join(', ',sort keys %hash),"\n");

如果您正在訪問哈希多次,要使用相同的順序,考慮建立一個單一的數組來保存排序的序列,然後使用數組(這將留在排序順序)遍曆哈希。例如:

my @sortorder = sort keys %hash;
foreach my $key (@sortorder)

哈希大小

你的大小 - 使用任一鍵或值的標量上下文從一個哈希 - 也就是說,元素的數目:

#!/usr/bin/perl

%ages = ('Martin' => 28, 'Sharon' => 35, 'Rikke' => 29);
print "Hash size: ",scalar keys %ages,"\n";

This will produce following result
Hash size: 3

在哈希表中添加和刪除元素

可以做一個使用簡單的賦值操作符的代碼行添加一個新的鍵/值對。但是從哈希中刪除一個元素,你需要使用刪除功能.

#!/usr/bin/perl

%ages = ('Martin' => 28, 'Sharon' => 35, 'Rikke' => 29);

# Add one more element in the hash
$age{'John'} = 40;
# Remove one element from the hash
delete( $age{'Sharon'} );