学习了pop, push, shift, and unshift之后, 有人问我怎样从数组中删除一个元素。
这个问题并不简单,不过,根据你自己的需求,你可以决定是否花时间学习。
怎样从数组中删除一个元素
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
splice @dwarfs, 3, 2;
print "@dwarfs"; # Doc Grumpy Happy Dopey Bashful
仔细观测上例的结果,不难发现,数组中的第4个和第5个元素被删除了。 splice 的二个参数告诉它偏移值(offset) 是多少,第三个参数告诉它要删除几个。
怎样在数组中添加一个元素?
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
splice @dwarfs, 3, 0, 'SnowWhite';
print "@dwarfs";
# Doc Grumpy Happy SnowWhite Sleepy Sneezy Dopey Bashful
观察以上例子的结果,结合前面介绍的你就可以猜到splice 在类似情形如何使用了。
怎样在数组中增添多个元素?
其实,增添一个元素是增添多个元素的特殊情况。
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
splice @dwarfs, 3, 0, 'SnowWhite', 'Humbert';
print "@dwarfs";
# Doc Grumpy Happy SnowWhite Humbert Sleepy Sneezy Dopey Bashful
很容易明白吧。
怎样把一个数组中的元素添加到另一个数组中?
只要把splice的第四个参数换成你想要添加的数组就好了。
my @others = qw(SnowWhite Humbert);
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
splice @dwarfs, 3, 0, @others;
print "@dwarfs";
替换掉数组中的某些元素?
添加和删除一起完成。
my @others = qw(SnowWhite Humbert);
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
splice @dwarfs, 2, 4, @others;
print "@dwarfs\n";
# Doc Grumpy SnowWhite Humbert Bashful
splice
几乎所有的数组操作都可用 splice 实现。 除了第一个参数,数组,为必须,其余的参数都不是必须的。
splice ARRAY, OFFSET, LENGTH, LIST
OFFSET 和 LENGTH 定义了 ARRAY 中将要删除的部分, LIST 表示在删除的位置上要添加的元素。 如果LIST 省略,表示只删除,不增加。
返回值
在 LIST 情境 splice 返回移除的值.
my @others = qw(SnowWhite Humbert);
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
my @who = splice @dwarfs, 3, 2, @others;
print "@who\n";
# Sleepy Sneezy
在 SCALAR 情境,返回最后一个移除的值,如果没有值被移除,则返回 undef。
my @others = qw(SnowWhite Humbert);
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
my $who = splice @dwarfs, 3, 2, @others;
print "$who\n";
# Sneezy
参数为负值?
偏移值(OFFSET)和长度(LENGTH)值都可以为负数,表示从数组的末尾算起。
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
my @who = splice @dwarfs, 3, -1;
print "@who";
# Sleepy Sneezy Dopey
偏移为3,即从第四个算起,-1 表示直到整个数组的倒数第一个。
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
my @who = splice @dwarfs, -3, 1;
print "@who";
# Sneezy
从倒数第三个开始,向右移除的第一个元素。
总结
希望你弄清楚了怎样使用 splice
。