perl列表子集范围

时间:2014-08-13 03:38:10

标签: perl list

在我问的另一个问题中,我试图找到一种从列表中获取子集列表(或数组)的方法,认为这可以通过切片或拼接来完成。使用数组它就像:

一样简单
@arr[2 .. $#arr]

获取一个数组,该数组具有从索引2处的元素到结尾的所有相同元素(即跳过前2个元素)。但是,如何使用列表完成此操作,您无法使用$#arr之类的内容(因为列表没有名称)。所以这就是问题,是否可以使用列表执行此类操作而无需复制到数组或使用多行代码?是否有一些简单的符号来提取到达列表的 end 的任意长度列表(不需要事先知道列表的长度)?换句话说就是这样:

(1,2,3,4,5,6,7)[1 .. -1];

(显然不起作用)

(2,3,4,5,6,7)

是否存在这样的符号或函数(对于列表)?

2 个答案:

答案 0 :(得分:9)

sub { @_[1..$#_] }->( 1,2,3,4,5,6,7 )

答案 1 :(得分:0)

对ikegami的解决方案进行概括:

my @a = (1,2,3,4,5,6,7);
my @b = sub { @_[1..$#_] }->(@a);

b现在是(2,3,4,5,6,7)

**您也可以使用splice()以更直接的方式执行此操作:**

my @c = @a;
splice (@c, 0, 1, ());

c现在是(2,3,4,5,6,7)