#perl
#perl
Вопрос:
Я определяю множество массивов структур в модуле. например
my $array = [
{
Field1 => "FieldValue1"
},
{
#etc...
},
];
my $array2 = [
{
Field1 => "FieldValue1"
},
{
#etc...
},
];
Я часто повторяю последовательности структур. Например, у меня может быть пять структур {Field1 => «FieldValue1»} подряд. Возможно ли сохранить последовательность структур в некоторой структуре данных и вставить это в мои массивы?
например
my $array3 = [ $Field1, $Field1, $Field1 ]; # $Field1 is a sequence of structs
Ответ №1:
Вы можете это сделать, но все они будут создавать копии друг друга. Таким образом, редактирование первого изменит их все. Вместо этого используйте map
.
my $array3 = [ map {Field1 => "FieldValue1"}, 1..5 ];
Ответ №2:
Каждый раз, когда вы обнаруживаете, что повторяете шаблонный код, Perl обычно находит способ обойти это.
Я не совсем понимаю, что вы хотите сделать, но вы могли бы сделать что-то вроде этого:
sub make_struct {
{Field1 => "FieldValue1"}
}
my $array = [map make_struct, 1 .. 10]; # array with 10 hashes
sub make_struct_array {[map make_struct, 1 .. $_[0]]}
my $array2 = make_struct_array 20; # array with 20 hashes
Итак, другими словами, напишите подпрограмму, которая возвращает вам новую структуру данных. Подпрограмма может использовать множество опций, если вам нужно настроить структуру.
Комментарии:
1. Звучит здорово. Что, если бы я хотел чередовать одну конкретную структуру между двумя последовательностями make_struct? например, мой $array = [make_struct, { myCustomStruct => «blah»}, make_struct];
Ответ №3:
Приведенные выше ответы хорошо работают для своих собственных целей, но они были не совсем тем, что я хотел.
В итоге я использовал push()
для создания массивов. $templatearray1
и $templatearray2
представляют собой массивы структур. Поведение Push() заключается в том, чтобы не вставлять ссылку на массив. Вместо этого он вставляет элементы массивов. например
my $myarray = [];
push(@$myarray, @$templatearray1);
push(@$myarray, @$templatearray2);
push(@$myarray, @$templatearray1);
push(@$myarray, @$templatearray2);
push(@$myarray, @$templatearray1);
push(@$myarray, @$templatearray2);
push(@$myarray, (
{
key1 => 'blah1',
key2 => 'blah2',
},
));