perl 数组操作

数组末端元素操作 pop、push

@quarry = qw(bedrock slate lava granite);
=begin comment
@quarry 初始值是(bedrock,slate,lava,granite)
=cut

pop 取出数组中最后一个元素并将它返回

$rock1 = pop @quarry;
$rock2 = pop(@quarry);
=begin comment
$rock1 的值为:granite
$rock2 的值为:lava
quarry 现在的值为:(bedrock,slate)
=cut

注意到上面的代码中,pop 后面的括号可加可不加,这是 perl 的惯例:只要不会因为拿掉括号就改变原意,括号就是可省略的。
如果数组是空的, pop 将不会执行任何操作且直接返回 undef。

与 pop 相对应的是 push 操作,添加一个或一串元素到数组末端,同样 push 后面的括号可加可不加。

push (@quarry, 'dolomite');
=begin comment
末端追加一个元素
quarry 现在的值为:(bedrock,slate,dolomite)
=cut
push @quarry, 'quartz';
=begin comment
再追加一个元素
quarry 现在的值为:(bedrock,slate,dolomite,quartz)
=cut
@others = qw(schist breccia marble);
push @quarry, @others;
=begin comment
也可以追加另一个数组中的元素
quarry 现在的值为:(bedrock,slate,dolomite,quartz,schist,breccia,marble)
=cut

push 可以向末端追加多个元素,注意最后一个语句,这里并不是追加另一个名为 others 的数组,而是追加数组 others 中的元素,数组的元素不可以是另一个数组而只能是标量,这里其实是把数组名展开成它所包含的元素列表。

数组首位元素操作 shift、unshift

类似 popshift 取出首位元素并将它返回,如果数组为空,将不执行任何操作,并返回 undef。

$rock1 = shift (@quarry);
$rock2 = shift @quarry;
=begin comment
rock1 的值为 bedrock
rock2 的值为 slate
quarry 现在的值为:(dolomite,quartz,schist,breccia,marble)
=cut

相对应的,unshift 向数组头部插入一个或一组元素。

unshift(@quarry, 'lava');
@others = qw(feldspar granite);
unshift @quarry, @others;
=begin comment
quarry 现在的值为:(feldspar,granite,lava,dolomite,quartz,schist,breccia,marble)
=cut

shiftunshift 后面的括号同样可加可不加

使用 splice 添加或移除数组中间的元素

splice 函数的语法如下:

splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]

各参数含义如下:
@ARRAY:操作对象,必须是数组。
OFFSET:起始位置的索引。
LENGTH:操作的元素个数,0 表示在 OFFSET 处添加元素,大于 0 表示删除起始索引处开始的 LENGTH 个元素。
LIST:添加的元素列表。

删除指定位置到数组末端的全部元素:

@removed = splice @quarry, 5;
=begin comment
从索引位置为 5 的元素开始一直到末尾的元素全部取出,并返回。
此时,
@removed 的值为:(schist,breccia,marble)
@quarry 的值为:(feldspar,granite,lava,dolomite,quartz)
=cut

删除指定位置开始的 n 个元素:

@removed = splice(@quarry, 1, 2);
=begin comment
删除从索引位置为 1 开始的 2 个元素,并返回。
此时,
@removed 的值为:(granite,lava)
@quarry 的值为:(feldspar,dolomite,quartz)
=cut

LENGTH 的值为 0 时,在指定位置添加元素:

@others = qw(bedrock slate);
splice(@quarry, 1, 0, @others);
=begin comment
在索引位置为 1 处,添加 @others 中的元素,此时,
@quarry 的值为:(feldspar,bedrock,slate,dolomite,quartz)
=cut
splice @quarry 2, 0, 'lava';
=begin comment
在索引位置为 2 处添加一个元素,此时,
@quarry 的值为:(feldspar,bedrock,lava,slate,dolomite,quartz)
=cut

合并上述操作:

splice @quarry, 1, 3, qw(evaporite tuff);
=begin comment
从索引为 1 的位置开始,删除 3 个元素,再追加 2 个元素,此时,
@quarry 的值为:(feldspar,evaporite,tuff,dolomite,quartz)
=cut

数组最后一个元素的索引值 $#ARRAY

$ix_last = $#quarry
=begin comment
$ix_last 的值为 4
=cut
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值