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

时间:2009-03-04 17:57:12

标签: perl arrays slice

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

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

6 个答案:

答案 0 :(得分:35)

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

如果您不需要undef,则:

@last_n = ($n >= @source) ? @source : @source[-$n..-1];

答案 1 :(得分:5)

我认为你想要的是slice

答案 2 :(得分:2)

@a = (a .. z);
@last_five = @a[ $#a - 4 .. $#a ];
say join " ", @last_five;

输出:

  

v w x y z

答案 3 :(得分:1)

简单,没有数学:

@a = reverse @a;
@a = splice(@a, 0, $elements_to_keep);
@a = reverse @a;

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

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

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

如果您不确定@source至少有$n个元素:

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