2013-05-21 39 views
3

我有幾個陣列具有相同大小象下面這樣:如何在Perl中將相同大小的數組合併到一個數組中?

@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] 
    ); 
+2

問題是,你要複製的數組或引用創建辦? – TLP

+0

一個更好的問題是,爲什麼你首先有4個獨立的數組? – cjm

+0

我想複製數組 – Nurahmad

回答

6

你會做任何的這些東西:

push @m, \@m1, \@m2, ...  # references, using the same memory address 
push @m, [ @m1 ], [ @m2 ], .... # making copies, placing them in anonymous arrays 

這將創建一個二維數組,這是你在你的問題都說明,我以爲你想要的。當然,您不需要使用push,但可以使用任何方式來操作數組。

7

編輯:既然你要複製的陣列(根據您的評論),那麼我會做this--

my @m = ([ @m1 ], [ @m2 ], [ @m3 ], [ @m4 ]); 

有關更多信息,請參見perldoc perlrefperldoc 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 
      ] 
     ]; 
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() ]; 
... 
相關問題