perl學習(6) 哈希

哈希在perl裏是很重要的數據結構,現在想想定義三種變量:

1,標量,就是c中的變量:$name

2,列表,就是數組:@list

3,哈希,形式上就是c中的map:%hash

 

1.1.定義

 

如果Perl 只有3 個key/value 對,它的速度很快。當擁有3 百萬key/value 對時,其速度仍非常快。大的hash 表,對性能不會有什麼影響。

 

 

特點:

1.       當將某個值存儲在已經存在的hash 元素中,以前的值會被覆蓋

2.       如果沒有存放值,則其返回undef

 

 

#! /usr/bin/perl

use strict ;

use warnings ;

#聲明

my %family_name;

$family_name{"xiaowei"} = "huang";

$family_name{"jialin"} = "wang";

$family_name{"areu"} = "who";

#初始化

my %color = ("red"=>1 , "yellow"=>2,"black"=>3 ) ;

 

1.2.函數

#hash function

1.2.1.   keys,values

my @hashks = keys%color ;              #返回所有的key

my @hashvs = values %color ;    #返回所有的value

在標量context 中,這些函數返回hash 中元素的個數(key/value)。此類操作不需要訪問hash 的每一個元素,其效率是很高。

my $size = keys %color ;      #得到3,是指有3 key/value

 

1.2.2.   each 函數

迭代hash 的每一個元素(如,檢查每一個元素),一種通常的方法是使用each 函數,它將返回key/value 對的元素列表。

實踐中,一般只在while 循環中使用each

while (($key, $value) = each %hash){

       print “$key => $value\n”;

}

 

#有序輸出

foreach my $key (sort keys %color)

{

    print "$key=>",$color{"$key"},"\n";

}

 

1.2.3.   exists 函數

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

if(exists $books{$dino}){

       rint “Hey, there’s a libaray card for dino!\n”;

}

 

1.2.4.   delete 函數

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

my $person = “betty”;

delete $books{$person};

1.3.常用法

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章