perl列表子集范围

问题描述 投票:4回答:2

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

@arr[2 .. $#arr]

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

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

得到的(显然不起作用)

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

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

perl list
2个回答
9
投票
sub { @_[1..$#_] }->( 1,2,3,4,5,6,7 )

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)

© www.soinside.com 2019 - 2024. All rights reserved.