2009-03-04 7 views

Répondre

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

Si vous avez besoin d'aucun undef s, puis:

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

Cela ne fonctionne pas si @source a moins de $ n éléments. – mike

+0

Cela fonctionne bien. undefs entrent dans @last_n dans les positions pour lesquelles @source n'a aucune valeur, ce qui est correct pour une sémantique non-entièrement déraisonnable de ce que signifie « prendre les derniers éléments N ». – chaos

+0

oh, je n'ai jamais utilisé des indices négatifs comme ça, j'ai appris quelque chose aujourd'hui! – Nathan

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

Ne fonctionne pas. Vous avez besoin du sigil, pas de virgule, et $ taille est trop grande par un. – chaos

+0

vous avez raison, trop de temps groovy- je vais modifier pour correspondre –

+0

Autant dire que la liste $ # comme Nathan au lieu de mettre scalaire (@list) - 1 dans une variable. – chaos

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

sorties:

v w x y z

1

simple, pas de maths:

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