我在模块中定义了很多结构数组。 e.g。
my $array = [
{
Field1 => "FieldValue1"
},
{
#etc...
},
];
my $array2 = [
{
Field1 => "FieldValue1"
},
{
#etc...
},
];
我经常重复结构序列。例如,我可能有五个{Field1 => “FieldValue1”}连续排列。是否可以在某些数据结构中保存结构序列并将其插入到我的数组中?
e.g。
my $array3 = [ $Field1, $Field1, $Field1 ]; # $Field1 is a sequence of structs
答案 0 :(得分:1)
你可以这样做,但他们都会结束彼此的副本。因此,编辑第一个将改变所有这些。而是使用map
。
my $array3 = [ map {Field1 => "FieldValue1"}, 1..5 ];
答案 1 :(得分:1)
任何时候你发现自己都在重复样板代码,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
换句话说,编写一个为您返回新数据结构的子例程。如果您需要自定义结构,子例程可以采用多种选项。
答案 2 :(得分:0)
上面的答案很适合他们自己的目的,但他们并不完全是我想要的。
我最终用push()
来创建数组。 $templatearray1
和$templatearray2
是结构数组。 Push()的行为是不插入数组引用。相反,它会插入数组的元素。
e.g。
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',
},
));