Изменение размера массива
Проблема
Требуется увеличить или уменьшить размер массива. Допустим, у вас имеется массив работников,
отсортированный по размерам оклада, и вы хотите ограничить его пятью самыми высокооплачиваемыми работниками.
Другой пример — если окончательный размер массива точно известен, намного эффективнее выделить всю память
сразу вместо того, чтобы увеличивать массив постепенно, добавляя элементы в конец.
Решение
Присвойте значение $#ARRAY:
# Увеличить или уменьшить @ARRAY
$#array = $NEW_LAST_ELEMENT_INDEX_NUMBER
Присваивание элементу, находящемуся за концом массива, автоматически увеличивает массив:
$ARRAY[$NEW_LAST_ELEMENT_INDEX_NUMBER] = $VALUE;
Комментарий
$#ARRAY — последний допустимый индекс массива @ARRAY. Если ему присваивается значение меньше текущего,
массив уменьшается. Отсеченные элементы безвозвратно теряются. Если присвоенное значение больше текущего,
массив увеличиваемся. Новые элементы получают неопределенное значение.
Однако $#ARRAY не следует путать с @ARRAY. $#ARRAY представляет собой последний допустимый индекс
массива, a @ARRAY (в скалярном контексте, то есть в числовой интерпретации) — количество элементов.
$#ARRAY па единицу меньше @ARRAY, поскольку нумерация индексов начинается с 0.
Массивы Perl не являются разреженными. Другими словами, если у вас имеется 10000-й элемент, то
должны присутствовать и остальные 9999 элементов. Они могут быть неопределенными, но все равно будут занимать
память. Из-за этого $array[time] или любая другая конструкция, где в качестве индекса используется очень
большое целое число, является неудачным решением. Лучше воспользуйтесь хэшем.
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|