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

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

有帮助吗?

解决方案

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

如果您不需要 undef ,那么:

@last_n = ($n >= @source) ? @source : @source[-$n..-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;

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

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

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

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

my @last_n = ($n >= @source) ? @source : splice(@source, -$n);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top