2009-03-04 13 views

Odpowiedz

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

Jeśli nie wymagają undef s, a następnie:

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

To nie działa, jeśli @source ma mniej niż $ n elementów. – mike

+0

Działa dobrze. undefs przejdź do @last_n w pozycjach, dla których @source nie ma wartości, co jest poprawne dla niektórych nie całkiem całkowicie nierozsądnych semantyki tego, co znaczy "wziąć ostatnie N elementów". – chaos

+0

oh, nigdy nie użyłem negatywnych indeksów dolnych, nauczyłem się czegoś dzisiaj! – Nathan

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

Nie działa. Potrzebujesz sigila, nie przecinka, a rozmiar $ jest za duży. – chaos

+0

masz rację, za dużo czasu w groovy - będę edytować, aby dopasować –

+0

Może również po prostu powiedzieć listę $ # jak Nathan zamiast wprowadzania skalar (@list) - 1 w zmiennej. – chaos

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

Wyjścia:

V W X Y Z

1

proste, bez matematyki:

@a = reverse @a; 
@a = splice(@a, 0, $elements_to_keep); 
@a = reverse @a; 
Powiązane problemy