2009-03-04 8 views

risposta

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

Se si richiede alcun undef s, quindi:

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

Questo non funziona se @source ha meno di $ n elementi. – mike

+0

Funziona bene. undefs entra in @last_n nelle posizioni per le quali @source non ha valori, il che è corretto per alcune semantiche non del tutto irragionevoli su cosa significhi "prendere gli ultimi N elementi". – chaos

+0

oh, non ho mai usato pedici negativi del genere, ho imparato qualcosa oggi! – Nathan

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

Non funziona. È necessario il .. sigillo, non la virgola e $ la dimensione è troppo grande di uno. – chaos

+0

hai ragione, troppo tempo in groovy- modifico per corrispondere a –

+0

Puoi anche dire $ # list come Nathan invece di mettere scalare (@list) - 1 in una variabile. – chaos

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

uscite:

v w x y z

1

semplice, non matematico:

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