提问人:mike 提问时间:3/5/2009 最后编辑:chaosmike 更新时间:10/11/2018 访问量:21263
获取 Perl 数组的最后 N 个元素的最佳方法是什么?
What's the best way to get the last N elements of a Perl array?
答:
6赞
siukurnin
3/5/2009
#1
我认为你想要的叫做切片。
42赞
chaos
3/5/2009
#2
@last_n = @source[-$n..-1];
如果不需要 s,则:undef
@last_n = ($n >= @source) ? @source : @source[-$n..-1];
评论
0赞
chaos
3/5/2009
它工作正常。undefs 在 @source 没有值的位置进入@last_n,这对于“获取最后 N 个元素”的含义的一些并非完全不合理的语义是正确的。
0赞
Borodin
5/29/2018
@Schwern:我很想知道是什么让你感到惊讶。是负整数的算术吗?希望条件表达式是显而易见的。
0赞
Schwern
5/30/2018
@Borodin已经九年了,但我猜是因为没有考虑过不工作。3..1
-3..-1
0赞
Borodin
5/30/2018
@Schwern:呵呵,我猜到的,看来至少有四个人同意你的看法。但是九年?当然,自从编写 Perl 以来就没有了,而且可能在做整数算术之后就没有了。
4赞
Nathan
3/5/2009
#3
@a = (a .. z);
@last_five = @a[ $#a - 4 .. $#a ];
say join " ", @last_five;
输出:
v w x y z
1赞
sbin_bash
3/21/2017
#4
简单,无需数学:
@a = reverse @a;
@a = splice(@a, 0, $elements_to_keep);
@a = reverse @a;
-1赞
user2355282
5/29/2018
#5
TMTOWTDI,但我认为这更容易阅读(但删除了以下元素):@source
my @last_n = splice(@source, -$n);
如果您不确定它至少有以下元素:@source
$n
my @last_n = ($n >= @source) ? @source : splice(@source, -$n);
评论
0赞
Borodin
5/29/2018
这将从原始数组中删除元素。数组切片将它们保留在原位,这很可能是想要的。
0赞
serolmy
10/11/2018
#6
由于@a在标量上下文中给出数组的长度 a 并且因为(除非设置为非零),因此可以通过 -- #tmtowtdi 获得从$nth(从零计数)到最后一个元素的切片。@a == $#a + 1
$[
@a[$n..@a-1]
评论