获取Perl数组的最后N个元素的最佳方法是什么?
如果数组小于N,我不希望返回值中有一堆undefs
。
答案 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);