Perl 雜湊Hash用法之入門教程

來源:互聯網
上載者:User

一、什麼是Perl Hash

雜湊是一種資料結構,和數組類似,可以將值存放到其中,或者從中取回值。但是,和數組不同的是,其索引不是數字,而是名字。也就是說,索引(這裡,我們將它叫key)不是數字而是任意的唯一的字串。

key可以是任意的字串,你可以使用任何的字串作為key,但它們是唯一的。
另一種思考hash 的方法是,把它看作一堆資料(a barrel of data),每一個資料都有一個相應的標籤。可以通過標籤訪問此標籤對應的元素。但其中是沒有“第一個”元素的概念的。在數組中,數組元素從0,Perl學習之雜湊hash_馬亮的電腦技術1,2 開始編號。但在hash中,沒有確定的順序,因此也沒有第一個元素。只是一些key/value 對的集合。

keys和values均為任意的標量,但keys通常轉換為字串。因此,如果將運算式50/20 作為keys,則其通常被轉換為3字元的字串“2.5”。
由於Perl的“沒有不必要的限制”的設計哲學:hash可以是任意大小,從空hash(沒有key/value對),到任何你記憶體允許的大小。
keys是唯一的,但values可以重複。hash的value可以是數字,字串,undef,或者它們的混合,但key是唯一的。

為什麼使用Perl Hash

可以把hash看作一個簡單的資料庫,其中每一個key下面可以有一塊資料。如果你的任務是關於:“查詢重複的”,“唯一的”,“交叉引用的”,“查詢表”,則hash很可能在這類應用中幫上Perl學習之雜湊hash_馬亮的電腦技術你的忙。

二、Perl Hash元素的存取

要訪問hash 元素,可以使用下面的文法:$hash{$some_key}
這和訪問數組元素的方法有些類似,這裡下標(key)上使用的是花括弧({}),而不是方括弧([ ])。現在key 的運算式是字串,而非數字。
hash的名字和Perl中其它的標識符的命名規則是一樣的(字母,數字,底線組成,但不能由數字開頭)。
訪問不存在的hash元素將得到undef。

1.作為整體的Perl Hash

要引用整個hash,使用百分比符號(%)作為首碼。
為了方便,hash可以轉換為列表,或者反過來。

2.Perl Hash賦值

可以使用如下的文法在hash 之間拷貝:
%new_hash = %old_hash;
將hash轉變成其它形式更加常見。例如,我們可以將hash反轉:
%inverse_hash = reverse %any_hash;

3.大箭頭符號(=>)

當給hash賦值時,有時並不明顯哪些元素是keys,那些是values,因此發明了大箭頭符號(=>)。在需要逗號的時候,都可以使用大箭頭符號替換。
如:

複製代碼 代碼如下:my %last_name = (
"www" => 1,
"eee" => 2,
);

三、Perl Hash函數

某些有用的函數可以對整個hash 進行操作。

1.keys和values函數

keys函數會返回此hash的所有keys,values函數將返回所有的values。如果hash中沒有元素,則此函數將返回空列表。

複製代碼 代碼如下:my %hash = ("a"=>1, "b"=>2, "c"=>3);
print my @k = keys %hash;
print my @v = values %hash;

2.each函數

如果想迭代hash的每一個元素,一種通常的方法是使用each函數,它將返回key/value對應的2個元素列表。
當對同一個hash 函數進行一次迭代時,將返回下一個key/value對,直到所有的元素均被訪問。如果沒有更多的key/value對,則each函數將返回空表。

複製代碼 代碼如下:my %hash = ("a"=>1, "b"=>2, "c"=>3);
while(($key, $value) = each %hash)
{
print "$key => $value\n";
}

當然,each返回的key/vlaue對,順序是混亂的(它其順序和keys和values函數返回的順序相同)。如果想將其按序排放,可以對它們排序(使用sort)。

複製代碼 代碼如下:my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
foreach $key (sort keys %hash)
{
$value =$hash{$key};
print "$key => $value\n";
}

四、Perl Hash的通常用法

1.exists函數

要查看hash中是否存在某個key,可以使用exists函數,如果hash中存在此key,則返回true,與是否有對應的value無關。

複製代碼 代碼如下:my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
if(exists $hash{'a'})
{
print "true";
}

2.delete 函數

delete函數將某個給定的key(包括其對應的value)從hash中刪除。如果不存在這個key,則什麼也不做,不會有警告或者錯誤資訊。

複製代碼 代碼如下:my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
delete $hash{'a'};
foreach $key (sort keys %hash)
{
$value =$hash{$key};
print "$key => $value\n";
}

3.Perl Hash 元素的插入

你可以在雙引號的字串中使用單個hash元素,但不支援整個hash 的插入。

複製代碼 代碼如下:my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
foreach $key (sort keys %hash)
{
print "$key => $hash{$key}\n";
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.