2009-03-04 11 views

Respuesta

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

Si necesita ningún undef s, entonces:

@last_n = ($n >= @source) ? @source : @source[-$n..-1]; 
+0

Eso no funciona si @source tiene menos de $ n artículos. – mike

+0

Funciona bien. undefs entran en @last_n en las posiciones para las cuales @source no tiene valores, lo que es correcto para algunas semánticas no del todo irracionales de lo que significa "tomar los últimos N elementos". – chaos

+0

oh, nunca he usado subíndices negativos como ese, ¡aprendí algo hoy! – Nathan

-2
my $size = (scalar @list) - 1; 
my @newList = @list[$size-$n..$size]; 
+0

No funciona. Necesita el .. sigil, no coma, y ​​$ size es demasiado grande para uno. – chaos

+0

tienes razón, demasiado tiempo en Groovy- Voy a editar para que coincida con –

+0

También puedo decir $ lista como Nathan en lugar de poner escalar (@list) - 1 en una variable. – chaos

2
@a = (a .. z); 
@last_five = @a[ $#a - 4 .. $#a ]; 
say join " ", @last_five; 

salidas:

V W X Y Z

1

simple, no matemática:

@a = reverse @a; 
@a = splice(@a, 0, $elements_to_keep); 
@a = reverse @a; 
Cuestiones relacionadas