Как обработать массив переменных измерений в Perl - PullRequest
0 голосов
/ 25 мая 2019

У меня есть подпрограмма, которая берет ссылку на многомерный массив и обрабатывает его.

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

Можно ли определить размерность массива, чтобы я мог обработать все эти случаи внутри этого подпункта? Или мне нужно написать несколько сабов для обработки всех разных измерений?

1 Ответ

3 голосов
/ 25 мая 2019

Как и в большинстве динамических языков, массивы в Perl являются только одномерными.Вы обычно представляете двумерный массив, когда каждый элемент массива является ссылкой на другой массив, поэтому у вас фактически есть массив массивов.Если каждый элемент внутреннего массива также является ссылкой на третий массив, то у вас фактически есть трехмерный массив.

Если вы не знаете заранее, насколько глубоко ваш массив, вы можете использовать функция ref для проверки элемента на предмет его ссылки;если это так, разыменуйте его, чтобы получить другое измерение из вашего массива и обработать его.Если нет, то ожидайте, что это будет листовой элемент массива.

Одна потенциальная ошибка заключается в том, что Perl не применяет какую-либо структуру в массивах;разные элементы могут быть разных типов.Это означает, что подмассивы могут существовать вместе с простыми числами или строками в одном массиве.Было бы до кода построения массива, чтобы убедиться, что один массив не смешивается и не соответствует размерности.

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