2009-03-04 47 views

Trả lời

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

Nếu bạn không cần undef s, sau đó:

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

Điều đó không hiệu quả nếu @source có ít hơn $ n mục. – mike

+0

Nó hoạt động tốt. undefs đi vào @last_n ở các vị trí mà @source không có giá trị, điều này đúng cho một số ngữ nghĩa không hoàn toàn không hợp lý về ý nghĩa của việc "lấy các phần tử N cuối cùng". – chaos

+0

ồ, tôi chưa bao giờ sử dụng các bảng con tiêu cực như thế, tôi đã học được điều gì đó ngay hôm nay! – Nathan

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

Không hoạt động. Bạn cần .. sigil, không phải dấu phẩy, và kích thước $ là quá lớn bởi một. – chaos

+0

bạn đúng, quá nhiều thời gian trong groovy- Tôi sẽ chỉnh sửa để phù hợp với –

+0

Có thể chỉ cần nói $ # danh sách như Nathan thay vì đặt vô hướng (@list) - 1 trong một biến. – chaos

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

kết quả đầu ra:

v w x y z

1

đơn giản, không có môn toán:

@a = reverse @a; 
@a = splice(@a, 0, $elements_to_keep); 
@a = reverse @a; 
Các vấn đề liên quan