如何将相同大小的数组合并到Perl中的一个数组?

Nur*_*mad 3 arrays perl

我有几个大小相同的数组如下:

@m1= (1,1,0,1);
@m2= (0,1,1,1);
@m3= (0,1,1,0);
@m4= (1,1,0,0);
Run Code Online (Sandbox Code Playgroud)

问题是如何将它放在这样的数组中?

@m = (
      [1,1,0,1],
      [0,1,1,1],
      [0,1,1,0],
      [1,1,0,0]
     );
Run Code Online (Sandbox Code Playgroud)

gpo*_*ojd 7

编辑:既然你想复制数组(根据你的评论),那么我会这样做 -

my @m = ( [ @m1 ], [ @m2 ], [ @m3 ], [ @m4 ] );
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅perldoc perlrefperldoc perlreftut.

原始答案:

如果要将它们展平为一个数组:

my @m = ( @m1, @m2, @m3, @m4 );
Run Code Online (Sandbox Code Playgroud)

如果你想要一个arrayrefs数组:

my @m = ( \@m1, \@m2, \@m3, \@m4 );
Run Code Online (Sandbox Code Playgroud)

例:

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 ); 
Run Code Online (Sandbox Code Playgroud)

输出:

$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
          ]
        ];
Run Code Online (Sandbox Code Playgroud)


TLP*_*TLP 6

你可以做以下任何一件事:

push @m, \@m1, \@m2,  ...       # references, using the same memory address
push @m, [ @m1 ], [ @m2 ], .... # making copies, placing them in anonymous arrays
Run Code Online (Sandbox Code Playgroud)

这将创建一个二维数组,这是你在问题中描述的,我假设你想要.当然,您不需要使用push,但可以使用任何方式来操作数组.