获取 Perl 数组的最后 N 个元素的最佳方法是什么?
如果数组小于 N,我不希望undefs
返回值中有一堆。
@last_n = @source[-$n..-1];
如果你不需要undef
s,那么:
@last_n = ($n >= @source) ? @source : @source[-$n..-1];
我认为您想要的称为slice。
@a = (a .. z);
@last_five = @a[ $#a - 4 .. $#a ];
say join " ", @last_five;
输出:
vwxyz
简单,没有数学:
@a = reverse @a;
@a = splice(@a, 0, $elements_to_keep);
@a = reverse @a;
由于标量上下文中的@a 给出了数组 a 的长度,并且因为@a == $#a + 1
(除非$[
设置为非零),所以可以通过@a[$n..@a-1]
--#tmtowtdi 获得从第 $n 个(从零开始计数)到最后一个元素的切片。
TMTOWTDI,但我认为这更容易阅读(但从 中删除了元素@source
):
my @last_n = splice(@source, -$n);
如果你不确定它@source
至少有$n
元素:
my @last_n = ($n >= @source) ? @source : splice(@source, -$n);