清新的Perl(五)——散列(哈希)

本篇,我将讲解perl中另一个重要的数据结构——散列。散列,通俗讲就是什么都能装得下的“键值对”数据结构。散列的键,是字符串;而值可以是标量、数组甚至散列。

散列与数组组合使用,成为散列的数组、数组的散列是perl语言开发的黄金钥匙。

数据结构是编程的关键基础,像python、perl、ruby这样的脚本语言,最大的编程优势就在于拥有强大、简便的模块库,无论是操作excel表格、通过ssh远程服务器、开发网站等等操作,只需要调用库中的函数,便可以轻松的得到返回值。然后,将返回值放入标量、数组、散列或者三者的组合结构中,利用这三种变量提供的方法、正则表达式还有for、if控制结构实现对提取到的数据的加工。最后,再借助模块库,或是显示在屏幕中、或是存在数据库中、又或者用web展示出来。

对与perl语言的散列来说,入门学习阶段重点有三处:

  1. 如何初始化一个散列,如何赋值一个散列。
  2. 如何用for循环以及keys方法遍历散列中的键值对。
  3. 如何用exists判断散列中的某一个键是否存在。

一、散列的初始化和赋值

对于perl的散列,首先要记住的是散列符号%。用百分号%后面跟字母、下划线以及数字来声明一个散列变量。

%a;
%b;
%perl_hash;

在散列初始化赋值中,虽然perl语言有很多的形式,但是为了规范化和便于其他人阅读理解,我推荐养成使用“=>”符号来区分键值对:

%site = ('google'=>'google.com',
         'runoob'=>'runoob.com', 
         'taobao'=>'taobao.com');
#对于键,一直是字符串,所以可以不用加引号;但是值如果是字符串需要加引号:
%site = ( google =>'google.com',
          runoob =>'runoob.com', 
          taobao =>'taobao.com');
#我们可以增加一个新浪网址:
$site{sina} = 'sina.com';
#我们可以在散列site中加入一个数组:
@a = (1,2,3,4,5,6);
$site{array} =  \@a;#意为散列site的键array赋值了一个数组。
#我们来给散列赋值一个散列:
%b = (perl => "so easy!",
      python => "so easy too!");
$site{hash} = \%b;
#当然对于散列的散列赋值,更加通常的办法是:
$site{hash}{perl}="so easy!";
$site{hash}{python}="so easy too!";

#我们来读取散列中的值
#打印标量:
print $site{google}."\n"; #显示google.com
#打印数组中的值
print $site{array}[3]."\n";
#打印散列中的散列:
print $site{hash}{python};

以上就是perl的散列基本用法。其中对于数组和散列赋值给散列,需要使用“引用”技术,我将在后面的博文中进行讲解。

二、for循环和keys方法

perl散列与循环搭配,最常用的方法就是遍历散列中每一个键对应的值。常用格式如下:

%hash = (perl => "so easy!",
         python => "so easy too!",
         ruby => "it like perl!");
for $key (keys %hash){
   print $key."\t";        #打印键
   print $hash{$key}."\n"; #打印值
};

注意for语句的使用格式即可。

三、exists方法判断散列中的键

exists方法常用的场景很多,比如说:

用perl语言编写web后台,当前端使用JavaScript语言post发送json数据给后台时,perl语言会把json格式转化为散列(两者是完全相同的,极好理解),我们往会根据json数据包含的对象(也就是散列中的键)进行判断,并为用户返回不一样的网页内容。

exists方法使用格式如下:

if exists $hash{key} {
   print "yes!\n";
} else {
   print "no!\n";
}

好了,我们这一篇博文就结束了,散列方面请大家结合手头的书籍重点学习初始化、赋值、keys和exists即可入门。

下一篇,我将讲解perl语言的子函数。

标签