Почему $ # на единицу меньше, чем фактическое количество элементов в массиве? - PullRequest
0 голосов
/ 22 августа 2011

Кто-нибудь знает, почему $#a на единицу меньше, чем количество элементов в массиве?

$ perl -we '@a=(1,2);print $#a'
1

Ответы [ 5 ]

12 голосов
/ 22 августа 2011

Это индекс последнего элемента, и поскольку массивы начинаются с нуля (если только вы не возитесь с вещами, которые лучше оставить в покое), $#a на единицу меньше длины массива.

11 голосов
/ 22 августа 2011

Я думаю, это потому, что это индекс последнего элемента в массиве. Поскольку индексация массива начинается с 0, вам нужно добавить один, чтобы получить общее количество элементов в массиве.

Примечание: вы также можете сделать это, чтобы найти счетчик массива:

@arr = ("one", "two");
$count =  @arr;
print $count;
3 голосов
/ 22 августа 2011

Массив @a = ("a","b","c");

Значение $ # a = индекс последнего элемента (= 2).

$a[0] = "a"; $a[1] = "b"; $a[2] = "c";

, есливы хотите получить количество элементов в массиве, вы можете присвоить массив скаляру, например

$arrayLength = @a; # (= 3)

Надеюсь, это поможет вам

2 голосов
/ 22 августа 2011

Все говорят вам что он возвращает (что вы уже знаете), но вы спросили почему возвращает то, что он делает.

К сожалению, на самом деле невозможно ответить , почему возвращает то, что делает. Может быть, потому что это облегчает следующее?

for (0..$#a) {
   ...
}
2 голосов
/ 22 августа 2011

$#array используется для поиска индекса последнего элемента в массиве.

В приведенном выше примере это позиция 1 - поскольку индексы в массивах начинаются с 0 в perl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...