¿Cuál es la mejor manera de obtener los últimos N elementos de una matriz Perl?

StackOverflow https://stackoverflow.com/questions/611723

  •  03-07-2019
  •  | 
  •  

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.

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top