¿Cuál es la mejor manera de obtener los últimos N elementos de una matriz Perl?
Pregunta
¿Cuál es la mejor manera de obtener los últimos N elementos de una matriz Perl?
Si la matriz tiene menos de N, no quiero un grupo de undefs
en el valor de retorno.
Solución
@last_n = @source[-$n..-1];
Si no necesita undef
s, entonces:
@last_n = ($n >= @source) ? @source : @source[-$n..-1];
Otros consejos
Creo que lo que quieres se llama un sector .
@a = (a .. z);
@last_five = @a[ $#a - 4 .. $#a ];
say join " ", @last_five;
salidas:
v w x y z
simple, sin matemáticas:
@a = reverse @a;
@a = splice(@a, 0, $elements_to_keep);
@a = reverse @a;
Como @a en el contexto escalar, da la longitud en una matriz a y porque @a == $ # a + 1
(a menos que $ [
esté establecido en non- cero), se puede obtener la porción desde $ nth (contando desde cero) hasta el último elemento mediante @a [$ n .. @ a-1]
- #tmtowtdi.
TMTOWTDI, pero creo que es un poco más fácil de leer (pero elimina los elementos de @source
):
my @last_n = splice(@source, -$n);
Y si no está seguro de que @source
tenga al menos $ n
:
my @last_n = ($n >= @source) ? @source : splice(@source, -$n);