2009-03-04 13 views

Antwort

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

Wenn Sie erfordern keine undef s, so gilt:

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

Das funktioniert nicht, wenn @source weniger als $ n Elemente hat. – mike

+0

Es funktioniert in Ordnung. undefs gehen in @last_n in die Positionen, für die @source keine Werte hat, was für eine nicht ganz unbegründete Semantik von dem, was es bedeutet, "die letzten N Elemente zu nehmen", richtig ist. – chaos

+0

oh, ich habe noch nie negative Indices benutzt, ich habe heute etwas gelernt! – Nathan

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

Funktioniert nicht. Du brauchst das .. sigil, nicht comma, und $ size ist um eins zu groß. – chaos

+0

du hast Recht, zu viel Zeit in groovy- Ich werde bearbeiten, um zu entsprechen –

+0

Mai auch sagen $ # Liste wie Nathan anstelle Skalar (@list) - 1 in einer Variablen setzen. – chaos

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

Ausgänge:

v w x y z

1

einfach, keine math:

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