Дополнительно
Определение размера массива в Perl
Кажется, я столкнулся с несколькими различными способами нахождения размера массива. В чем разница между этими тремя методами?
my @arr = (2);
print scalar @arr; # First way to print array size
print $#arr; # Second way to print array size
my $arrSize = @arr;
print $arrSize; # Third way to print array size
235
11
Первый и третий способы одинаковы: они оценивают массив в скалярном контексте. Я бы считал это стандартным способом получения размера массива.
Второй способ фактически возвращает последний индекс массива, что (обычно) не совпадает с размером массива.
Во-первых, второе не эквивалентно двум другим.
$#array
возвращает последний индекс массива, который на единицу меньше размера массива.Две другие функции практически одинаковы. Вы просто используете два разных средства для создания скалярного контекста. Это сводится к вопросу читабельности.
Лично я предпочитаю следующее:
Я нахожу его более ясным, чем
и
Последнее выглядит вполне понятным само по себе, но я нахожу, что лишняя строка отнимает ясность, когда является частью другого кода. Это полезно для обучения тому, что делает
@array
в скалярном контексте, и, возможно, если вы хотите использовать$size
более одного раза.Это позволяет получить размер путем принудительного перевода массива в скалярный контекст, в котором он оценивается как его размер:
Это еще один способ принудительного перевода массива в скалярный контекст, поскольку он присваивается скалярной переменной:
Это получает индекс последнего элемента в массиве, так что на самом деле это размер минус 1 (при условии, что индексы начинаются с 0, что можно настроить в Perl, хотя обычно это плохая идея):
Последний вариант не очень хорошо использовать для получения размера массива. Он будет полезен, если вы просто хотите получить последний элемент массива:
Также, как вы можете видеть здесь, на Stack Overflow, эта конструкция не обрабатывается корректно большинством синтаксических выделителей...
Чтобы использовать второй способ, добавить 1:
Все три дают одинаковый результат, если мы модифицируем второй немного:
Пример:
В “типы переменных в Perl” раздел из perlintro документации содержит
В perldata документации также рассматриваются в “скалярные величины” раздел.
и GT; $element_count = скаляр(@д.);
Ранее в этом же разделе Документы как получить индекс последнего элемента массива.
Из perldoc perldata, который должен быть безопасным для цитата:
Просто так долго, как вы Дон'т $#что++ и таинственно увеличить размер или массива.
и
Который приносит мне к тому, что я ищу, которая заключается в том, как обнаружить массив пуст. Я нашел его, если $#пусто == -1;
Существуют различные способы печати размер массива. Здесь представлены значения всех: Давайте предположим, что наш массив
моя @Арр = (3,4);
Метод 1: скалярные
Это правильный путь, чтобы получить размер массива.
Способ № 2: порядковый номер `$#Арр дает последний индекс массива. так что если массив имеет размер 10, то его последний индекс будет составлять 9.
Мы добавляем 1 здесь рассматривают массив как 0-проиндексированных. Но, если его не с нуля потом, этой логике не удастся.
Выше пример печатает 6, потому что мы поставили свой первоначальный индекс 4. Теперь индекс будет 5 и 6, с элементами 3 и 4 соответственно.
Способ № 3: Когда массив используется в скалярном контексте, то она возвращает размер массива
На самом деле Способ 3 и способ 1 такие же.
Как насчет инт(@массив), как угрозы аргумент как скаляр.
Чтобы найти размер массива использовать
скаляр
ключевое слово:Чтобы узнать последний индекс массива есть
$#
(в Perl переменная по умолчанию). Это дает последний индекс массива. Как массив начинается с 0, мы получаем размер массива путем добавления одного к$#
:Пример:
Выход: