20

获取 Perl 数组的最后 N 个元素的最佳方法是什么?

如果数组小于 N,我不希望undefs返回值中有一堆。

4

6 回答 6

40
@last_n = @source[-$n..-1];

如果你不需要undefs,那么:

@last_n = ($n >= @source) ? @source : @source[-$n..-1];
于 2009-03-04T18:06:40.423 回答
6

我认为您想要的称为slice

于 2009-03-04T18:01:12.260 回答
4
@a = (a .. z);
@last_five = @a[ $#a - 4 .. $#a ];
say join " ", @last_five;

输出:

vwxyz

于 2009-03-04T18:06:52.933 回答
1

简单,没有数学:

@a = reverse @a;
@a = splice(@a, 0, $elements_to_keep);
@a = reverse @a;
于 2017-03-21T14:57:53.460 回答
0

由于标量上下文中的@a 给出了数组 a 的长度,并且因为@a == $#a + 1(除非$[设置为非零),所以可以通过@a[$n..@a-1]--#tmtowtdi 获得从第 $n 个(从零开始计数)到最后一个元素的切片。

于 2018-10-11T10:05:17.300 回答
-1

TMTOWTDI,但我认为这更容易阅读(但从 中删除了元素@source):

my @last_n = splice(@source, -$n);

如果你不确定它@source至少有$n元素:

my @last_n = ($n >= @source) ? @source : splice(@source, -$n);
于 2018-05-29T08:36:59.317 回答