Perl如何获取数组引用的最后一个元素的索引?

时间:2010-06-04 16:05:31

标签: perl

如果我们有数组,那么我们可以做以下事情:

my @arr = qw(Field3 Field1 Field2 Field5 Field4);
my $last_arr_index=$#arr;

我们如何为数组引用执行此操作?

my $arr_ref = [qw(Field3 Field1 Field2 Field5 Field4)];
my $last_aref_index; # how do we do something similar to $#arr;

4 个答案:

答案 0 :(得分:53)

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

如果你需要知道最后一个元素的实际索引,例如你需要知道索引的数组元素,请使用$#$

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

如果你需要知道最后一个元素的索引,(例如填充下一个没有push()的自由元素),

或者您需要知道数组中的元素数量(与上面的数字相同):

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

如果你真正需要的是访问 arrayref中的最后一个元素(例如唯一的原因你希望知道索引是以后使用该索引来访问元素),您可以简单地使用“-1”索引引用数组的最后一个元素的事实。 Zaid的帖子为这个想法提供了道具。

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

答案 1 :(得分:16)

my $last_aref_index = $#{ $arr_ref };

答案 2 :(得分:7)

您可能需要访问最后一个索引的原因是获取数组引用中的最后一个值。

如果是这种情况,您只需执行以下操作:

$arr_ref->[-1];

->运算符取消引用。 [-1]是数组的最后一个元素。

如果需要计算数组中元素的数量,则无需执行$#{ $arr_ref } + 1。 DVK已经显示a couple of better ways来执行此操作。

答案 3 :(得分: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";