我有几个大小相同的数组如下:
@m1= (1,1,0,1);
@m2= (0,1,1,1);
@m3= (0,1,1,0);
@m4= (1,1,0,0);
问题是如何将它放在这样的数组中?
@m = (
[1,1,0,1],
[0,1,1,1],
[0,1,1,0],
[1,1,0,0]
);
答案 0 :(得分:7)
修改:由于您要复制数组(根据您的评论),我会这样做 -
my @m = ( [ @m1 ], [ @m2 ], [ @m3 ], [ @m4 ] );
有关详细信息,请参阅perldoc perlref和perldoc perlreftut。
原始回答:
如果你想将它们压平成一个数组:
my @m = ( @m1, @m2, @m3, @m4 );
如果你想要一个arrayrefs数组:
my @m = ( \@m1, \@m2, \@m3, \@m4 );
示例:
use Data::Dumper;
my @m1= (1,1,0,1);
my @m2= (0,1,1,1);
my @m3= (0,1,1,0);
my @m4= (1,1,0,0);
my @m = ( @m1, @m2, @m3, @m4 );
warn Dumper( \@m );
my @m_again = ( \@m1, \@m2, \@m3, \@m4 );
warn Dumper( \@m_again );
输出:
$VAR1 = [
1,
1,
0,
1,
0,
1,
1,
1,
0,
1,
1,
0,
1,
1,
0,
0
];
$VAR1 = [
[
1,
1,
0,
1
],
[
0,
1,
1,
1
],
[
0,
1,
1,
0
],
[
1,
1,
0,
0
]
];
答案 1 :(得分:6)
你会做以下任何一件事:
push @m, \@m1, \@m2, ... # references, using the same memory address
push @m, [ @m1 ], [ @m2 ], .... # making copies, placing them in anonymous arrays
这将创建一个二维数组,这是你在问题中描述的,我想你想要的。当然,您不需要使用push
,但可以使用任何方式来操作数组。
答案 2 :(得分:0)
my @m = ( \@m1, \@m2, \@m3, \@m4 );
但你应该避免将它们放入单独的数组中开始。
例如,
my @m1 = (1,1,0,1);
my @m2 = (0,1,1,1);
...
my @m = ( \@m1, \@m2, \@m3, \@m4 );
可以写成
my @m = (
[1,1,0,1],
[0,1,1,1],
...
);
例如,
my @m1 = f();
my @m2 = g();
...
my @m = ( \@m1, \@m2, \@m3, \@m4 );
可以写成
my @m;
$m[0] = [ f() ];
$m[1] = [ g() ];
...
或
my @m;
push @m, [ f() ];
push @m, [ g() ];
...