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;
32
задан Sachin 4 June 2010 в 16:05
поделиться

4 ответа

Причина, по которой вам, вероятно, потребуется доступ к последнему индексу, - это получить последнее значение в ссылке на массив.

Если это так, вы можете просто сделать следующее:

$arr_ref->[-1];

Разыменование оператора -> . [- 1] - последний элемент массива.

Если вам нужно подсчитать количество элементов в массиве, нет необходимости делать $ # {$ arr_ref} + 1 . ДВК показал несколько лучших способов сделать это.

7
ответ дан 27 November 2019 в 20:16
поделиться
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
ответ дан 27 November 2019 в 20:16
поделиться
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

Если вам действительно нужно получить доступ к последнему элементу в ссылке на массив (например, only ] причина, по которой вы хотите узнать индекс, состоит в том, чтобы позже использовать этот индекс для доступа к элементу ), вы можете просто использовать тот факт, что индекс «-1» относится к последнему элементу массива. Реквизит посту Зайда за идею.

$arr_ref->[-1] = 11;
print "Last Value : $arr_ref->[-1] \n";
# BTW, this works for any negative offset, not just "-1". 
53
ответ дан 27 November 2019 в 20:16
поделиться
my $last_aref_index = $#{ $arr_ref };
16
ответ дан 27 November 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: