Perl-07---数组

来源:互联网 发布:划船机选购知乎 编辑:程序博客网 时间:2024/05/21 17:40

1、数组的长度:

     如果把数组变量赋值给标量变量,那么赋给标量变量的就是数组的长度:

     $a = @Array;#标量变量$a中存放的是数组@Array的长度,即:数组中元素的个数;

     ($a,$b,$c) = (1,2,3);  #则把1赋值给$a,把2赋值给$b,把3赋值给$c;

     数组中的最后一个元素的下标索引由数组的特殊变量$#ArrayName决定;用“$#+数组名”表示一个特殊变量,这个变量中存放的是数组中最后一个存储单元的下标索引值;$#ArrayName又称为最后单元索引值,它总是表示数组中最后一个存储单元的下标值;

     所以可,可以使用这个特殊变量“$#数组名”也可以计算数组中元素的个数:

     #ArrayLength = $#ArrayName + 1;

     与数组中最后一个存储单元对应的是第一个存储单元,Perl中使用数组的特殊变量“$[”来表示数组中第一个存储单元的下标值,即:数组中第一个存储单元的索引值;而且可以通过修改这个特殊变量的值来改变数组中第一个存储单元的下标索引值,期于的存储单元的下标索引值则是在特殊变量“$[”的值的基础上顺序累加1得到;

    数组的特殊变量“$# + 数组名”表示数组中最后一个存储单元的下标索引值,Perl中可以通过改变这个特殊变量的值来增加或删除数组中的元素;

例如:要在数组@Array的末尾填加N个新元素的空间时,

          可以这样做:$#Array += N;或@Array[$#Array + 1]  = 值;

这就说明可以使用特殊变量“$# + 数组名”来设置数组的长度。Perl允许在数组中随时填加新的数组单元,这个时候系统会在新加入数组单元时自动扩展数组的存储空间和长度。所以说,Perl中的数组是动态数组;这在处理小的数组的时候比较方便,但是需要处理的数据量比较大的时候,却会使程序运行的速度大大减慢。这是每加入一个新的数组单元,系统都会自动扩展数组的空间和长度,而扩展操作是需要时间的,所以程序会变慢;如果可以事先知道需要处理的数组的长度,那么可以通过设置特殊变量“$# + 数组名”来初始化数组的存储单元空间,而后再使用数组,这样就会提高数据的处理效率;

2、增加和删除数组中的元素:

    通过增加特殊变量“$# + 数组名”的值可以为数组增加新的元素,此时Perl会自动扩展数组的存储空间:

    $Array[$#Array++] = $NewVar;

    通过减小特殊变量“$# + 数组名”的值可以删除数组中的元素,此时Perl会自动回收数组的存储空间:

    $#Array++ ;   #删除最后一个元素

    $#Array += N;#删除最后N个元素

    如果要把数组置为空数组,则只需要把“$# + 数组名”设置为-1即可:$#Array = -1;

    Perl中默认的数组单元下标编号为从0开始,依次递增,但是如果程序有特殊需要的话,可以通过改变数组的特殊变量“ $[”的值来改变数组存储单元的下标索引的起始值。$[可以设置为任意数值,剩余的编号仍然在这个值的基础上依次递增;

3、数组数据的读取:

     读取一个元素的值:$A  =  $Array[$Index];或  $A  =  @Array[$Index];

     读取部分元素的值:@SubArray  = @Array[$StartIndex .. $EndIndex];#这个也是读取子数组的方法;

     注意:访问读取数组@Array中的元素时,如果给出的下标$Index超过了数组@Array的下标范围,就说明要访问

                的元素不存在,此时就返回一个未定义值或空值(None/null);

4、子数组:

      在读取数组元素值的时候,可以读取数组中的一部分元素做为另外一个新的数组使用,这个新的数组称为子数组或数组分块;子数组的规则与数组相同;

子数组使用字符“@”和“[ ]”共同定义:@SubArray  = @ParentArrayName[StartIndex .. EndIndex];

引用数组中元素的时候,可以引用数组中不连续的单元,也可以不按顺序来引用数组单元或给数组单元赋值;