perl学习(6) 哈希

来源:互联网 发布:怎么样在淘宝网领金币 编辑:程序博客网 时间:2024/06/05 08:44

哈希在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,是指有3key/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.常用法

 

 

 

 

原创粉丝点击