• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【perl】学习笔记(八)--复杂数据结构

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文主要介绍Perl的复杂数据结构,包括:

  1. 二维数组
  2. 哈希结构及复杂哈希结构

二维数组

Perl的数组由一对圆括号及用逗号分隔的元素组成(当然还有其他的声明方式)。

如:@array = ("apple","orange","pear");

二维数组声明方式有两种:

  1. @array = ([1,2,3],[4,5,6],[7,8,9]);这种方式中@array表示数组,如左图。
  2. $ref_array = [[1,2,3],[4,5,6],[7,8,9]];这种方式中$array表示数组的引用,如右图。

两种声明方式没有太大差别。最终都得到了一个二维数组。针对这两种声明方式,同时也有两种数组读取方式。

  1. $array[0][0];直接操作数组,指代第一个数组中第一个元素。
  2. $ref_array->[0][0];由于第二种方式是引用数组,所以使用“->”进行读取,读取的结果同上。
  3. 由于数组的内部仍是引用,所以两种方法的引用方式还可以写成:$array[0]->[0]和$ref_array->[0]->[0].

Perl使用push函数向数组中新增元素

perldoc文档关于push方法的说明

[html] view plain copy
  1. C:\>perldoc -f push  
  2.     push ARRAY,LIST  
  3.     push EXPR,LIST  
  4.             Treats ARRAY as a stack by appending the values of LIST to the  
  5.             把数组当做一个栈,将LIST列表值追加到数组的尾部。  
  6.             end of ARRAY. The length of ARRAY increases by the length of  
  7.             数组的长度根据LIST列表的长度进行增加。  
  8.             LIST. Has the same effect as  
  9.             和下面程序的作用一样,但是效率更高。  
  10.                 for $value (LIST) {  
  11.                     $ARRAY[++$#ARRAY] = $value;  
  12.                 }  
  13.               
  14.             but is more efficient. Returns the number of elements in the  
  15.             返回推送完成后数组的长度。  
  16.             array following the completed "push".  
  17.   
  18.             Starting with Perl 5.14, "push" can take a scalar EXPR, which  
  19.             从Perl5.14开始,push方法允许标量作为参数,标量必须是一个数组的引用。  
  20.             must hold a reference to an unblessed array. The argument will  
  21.             参数将被自动指向引用  
  22.             be dereferenced automatically. This aspect of "push" is  
  23.             push的这个特性是实验性的,可能在未来的版本中被改变。  
  24.             considered highly experimental. The exact behaviour may change  
  25.             in a future version of Perl.  
  26.   
  27.             To avoid confusing would-be users of your code who are running  
  28.             earlier versions of Perl with mysterious syntax errors, put this  
  29.             sort of thing at the top of your file to signal that your code  
  30.             will work *only* on Perls of a recent vintage:  
  31.   
  32.                 use 5.014;  # so push/pop/etc work on scalars (experimental)  

使用方法:

push 数组/数组的引用,数值/数值的列表;

针对上面两种操作方法,分别为

push $array[0],2;

push $array->[0],2;

使用delete删除二维数组元素

使用方法:

delete 指定位置元素;

delete方法并非将该元素删除,而是将其值设为undef,数组的长度不会改变,可以重新设置该元素值。

针对上面两种操作方法,分别为

delete $array[2][2];删除二维数组最后一个元素。

delete $array->[2][2];同上。

修改数组值

修改数组内容只需要取得数组元素位置,让后重新对其赋值即可。此处不做赘述。

[python] view plain copy
  1. #!user/bin/env perl  
  2. #array 2D  
  3. #第一种二维数组声明方法  
  4.     my @array = ([1,2,3],[4,5,6],[7,8,9]);  
  5.     #向二维数组第一个数组引用中新增一个值  
  6.     $num = push $array[0],"2";  
  7.     #$num代表新增后数组的长度  
  8.     print "the number in array after push:$num\n";  
  9.     print "new add element:$array[0][3]\n";  
  10.     #delete删除元素只是将其设置为undef,$num代表删除元素的位置。  
  11.     $num = delete $array[2][2];  
  12.     print "the position where deleted:$num\n";  
  13.     print "\$array[2][2]=$array[2][2]\n";  
  14.     #重新设置值  
  15.     $array[2][2] = 1000;  
  16.     print "\$array[2][2]=$array[2][2]\n";  
  17.     print "\$array[1][1]=$array[1][1]\n";  
  18.       
  19. print "\n-----------------------------------------------------------------\n";  
  20. #第二种二维数组声明方法  
  21.     my $ref = [[1,2,3],[4,5,6],[7,8,9]];  
  22.     #向二维数组第一个数组引用中新增一个值  
  23.     $num = push $ref->[0],"2";  
  24.     #$num代表新增后数组的长度  
  25.     print "the number in ref after push:$num\n";  
  26.     print "new add element:$ref->[0][3]\n";  
  27.     #delete删除元素只是将其设置为undef,$num代表删除元素的位置。  
  28.     $num = delete $ref->[2][2];  
  29.     print "the position where deleted:$num\n";  
  30.     print "\$ref[2][2]=$ref->[2][2]\n";  
  31.     #重新设置值  
  32.     $ref->[2][2] = 1000;  
  33.     print "\$ref[2][2]=$ref->[2][2]\n";  
  34.     print "\$ref[1][1]=$ref->[1][1]\n";  


哈希结构

哈希结构由成对的键值对构成。在内存中以散列值的方式存储,因此并不保持放入顺序。

哈希结构定义方式

  1. %hash = ("Tom",50,"Tony",80,"Cindy",85);这种定义方法,要求括号内元素必须成对出现,阅读上不方便。
  2. %hash = ("Tom"=>50,"Tony"=>80,"Cindy"=>85);推荐使用第二种方法,方便阅读且不易出错。

获取哈希结构的key

@key = keys %hash;

获取哈希结构的value

@value = values %hash;

通过key获取value

$value = $hash{key};

遍历哈希结构

foreach $key (keys %hash)

{

   print "key:$key value:$hash{$key}\n";

}

向哈希结构中增加元素

$hash{new_key}=value;

删除哈希结构中元素

delete $hash{key};

修改哈希结构的值

$hash{key} = new_value;

上一篇:
perl oop_关于OOP2015的思考发布时间:2022-07-22
下一篇:
编译vim8源码同时支持python,pyhton3,lua,ruby,perl...(ubuntu16.4)发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap