题
获取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);
不隶属于 StackOverflow