2010-06-04 46 views

Trả lời

49
my $arr_ref = [qw(Field3 Field1 Field2 Field5 Field4)]; 
my ($last_arr_index, $next_arr_index); 

Nếu bạn cần biết chỉ số thực tế của yếu tố cuối cùng, ví dụ bạn cần để lặp qua các phần tử của mảng biết chỉ số, sử dụng $#$:

$last_arr_index = $#{ $arr_ref }; 
$last_arr_index = $#$arr_ref; # No need for {} for single identifier 

Nếu bạn cần biết chỉ mục của phần tử sau phần tử cuối cùng (ví dụ để điền phần tử miễn phí tiếp theo mà không cần push()),

HOẶC bạn cần biết số lượng phần tử trong mảng (đó là cùng một số) như trên:

my $next_arr_index = scalar(@$arr_ref); 
$last_arr_index = $next_arr_index - 1; # in case you ALSO need $last_arr_index 
# You can also bypass $next_arr_index and use scalar, 
# but that's less efficient than $#$ due to needing to do "-1" 
$last_arr_index = @{ $arr_ref } - 1; # or just "@$arr_ref - 1" 
    # scalar() is not needed because "-" operator imposes scalar context 
    # but I personally find using "scalar" a bit more readable 
    # Like before, {} around expression is not needed for single identifier 

Nếu những gì bạn thực sự cần là truy cập yếu tố cuối cùng trong arrayref (ví dụ chỉ chỉ lý do bạn muốn biết chỉ mục sau này sử dụng chỉ mục đó để truy cập phần tử), bạn có thể chỉ cần sử dụng thực tế là chỉ mục "-1" đề cập đến phần tử cuối cùng của mảng. Đạo cụ cho bài viết của Zaid cho ý tưởng.

$arr_ref->[-1] = 11; 
print "Last Value : $arr_ref->[-1] \n"; 
# BTW, this works for any negative offset, not just "-1". 
+0

Cảm ơn DVK. Đó là chính xác những gì tôi đã suy nghĩ khi tôi viết xuống câu trả lời của tôi. – Zaid

12
my $last_aref_index = $#{ $arr_ref }; 
+0

Cảm ơn chiên. Đây là những gì tôi đang tìm kiếm. – Sachin

+6

Hãy nhớ "chấp nhận" câu trả lời bạn thấy hữu ích nhất. –

5

Lý do bạn có thể cần phải truy cập vào các chỉ số cuối cùng là để có được giá trị cuối cùng trong mảng tham chiếu.

Nếu đúng như vậy, bạn chỉ có thể làm như sau:

$arr_ref->[-1]; 

Các -> dereferences điều hành. [-1] là phần tử cuối cùng của mảng.

Nếu bạn cần đếm số phần tử trong mảng, không cần phải làm $#{ $arr_ref } + 1. DVK đã hiển thị a couple of better ways để làm điều đó.

+0

Nhưng điều đó mang lại cho bạn giá trị của phần tử cuối cùng, không phải chỉ mục của nó. – friedo

+0

Có, nhưng tại sao người khác lại muốn chỉ mục cuối cùng? Tôi đã đủ điều kiện trả lời của tôi cho phù hợp. – Zaid

+2

Chúng tôi có thể yêu cầu nó $ hash_ref = {map {$ arr_ref -> [$ _] => $ _} 0 .. $ # {$ arr_ref}}; – Sachin

0
my $arr_ref = [qw(Field3 Field1 Field2 Field5 Field4)]; 

my $last_aref_index = $$arr_ref[$#{$arr_ref}]; 
print "last element is: $last_aref_index\n"; 
+0

trong tương lai, bạn có thể muốn sử dụng định dạng mã (nhận dạng bằng 4 dấu cách hoặc nhấp vào nút "mã" trong trình chỉnh sửa) – DVK

+0

cảm ơn. Tôi cũng có thể muốn đọc câu hỏi cẩn thận hơn, như ví dụ của tôi trả về "Field4" trái với chỉ số # ... jw – jason

Các vấn đề liên quan