【发布时间】:2010-10-11 08:03:15
【问题描述】:
获取 Perl 数组的最后 N 个元素的最佳方法是什么?
如果数组小于N,我不希望返回值中有一堆undefs。
【问题讨论】:
获取 Perl 数组的最后 N 个元素的最佳方法是什么?
如果数组小于N,我不希望返回值中有一堆undefs。
【问题讨论】:
我想你想要的是slice。
【讨论】:
@last_n = @source[-$n..-1];
如果您不需要undefs,那么:
@last_n = ($n >= @source) ? @source : @source[-$n..-1];
【讨论】:
3..1 不起作用没有考虑-3..-1。
@a = (a .. z);
@last_five = @a[ $#a - 4 .. $#a ];
say join " ", @last_five;
输出:
v w x y z
【讨论】:
简单,没有数学:
@a = reverse @a;
@a = splice(@a, 0, $elements_to_keep);
@a = reverse @a;
【讨论】:
TMTOWTDI,但我认为这更容易阅读(但从@source中删除了元素):
my @last_n = splice(@source, -$n);
如果你不确定@source 至少有$n 元素:
my @last_n = ($n >= @source) ? @source : splice(@source, -$n);
【讨论】:
由于@a 在标量上下文中给出了数组 a 的长度,并且因为 @a == $#a + 1(除非 $[ 设置为非零),所以可以从第 $n 个(从零开始计数)到 to 获取切片@a[$n..@a-1] 的最后一个元素 -- #tmtowtdi。
【讨论】: