#массивы #perl
my $poly = [ [0,0], [0,2], [2,2], [2,0] ]; это что то типа ссылки на анонимный массив массивов? мне нужно добавить не четыре подмассива из двух элементов, а, например, 1000, как это можно сделать? я бы сгенерировал через eval строку. но это как то извращенно. может както можно по другому? И как распечатать такого типа массив? спасибо!
Ответы
Ответ 1
my $poly = [ [0,0], [0,2], [2,2], [2,0] ]; # ссылка на пустой массив $poly =[]; # Можно так, если массив можно собрать тут же: push @{$poly}, [3,0]; # Или так, если массив где то еще: my @arr=(3,0); push @{$poly}, \@arr; # Или так $poly->[4]=[3,0]; # Ну и скажем обращение к элементу вложенного массива print $poly->[1]->[1]; # 2 Не знаю в каком виде вы бы хотели его напечатать, вот так его можно обходить, углубляясь в структуру: for( @{$poly} ) { for( @{$_} ) { print; } }Ответ 2
Обычный массив создаётся в скобках (1,2,3), а это ссылка на массив [1,2,3]. Получается в вашем случае имеем ссылку на массив из ссылок на массивы [[1,2],[3,4]], такое в перле используется тоже часто. Вывести можно его с помощью Data::Dumper (который может кстати вывести произвольную по вложенности сложную структуру), также можно вручную. Добавлять элемент как и в обычный массив push @$poly, [1,2], но при этом нужно разыменовывать ссылку (дополнительный @ в начале), либо можно разыменовывать через стрелку $poly->[0] (где 0 это индекс). Вот код (запустить онлайн): use Data::Dumper; # Создаём массив вручную my $poly = [ [0,0], [0,2], [2,2], [2,0] ]; # Выводим через Dumper print Dumper($poly); # Заполняем массив в цикле $poly = []; for $i (0..9) { push @$poly, [$i, $i + 1]; } # Выводим через Dumper print Dumper($poly); # Выводим массив вручную for $i (0..scalar(@$poly) - 1) { print "[", $poly->[$i]->[0], ",", $poly->[$i]->[1], "] "; } print "\n"; # Также можно вывести весь массив таким навороченным синтаксисом print "[" . join(", ", map { "[" . join(", ", @$_) . "]" } @$poly) . "]\n";
Комментариев нет:
Отправить комментарий