我有幾個陣列具有相同大小象下面這樣:如何在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]
);
我有幾個陣列具有相同大小象下面這樣:如何在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]
);
你會做任何的這些東西:
push @m, \@m1, \@m2, ... # references, using the same memory address
push @m, [ @m1 ], [ @m2 ], .... # making copies, placing them in anonymous arrays
這將創建一個二維數組,這是你在你的問題都說明,我以爲你想要的。當然,您不需要使用push
,但可以使用任何方式來操作數組。
編輯:既然你要複製的陣列(根據您的評論),那麼我會做this--
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
]
];
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() ];
...
問題是,你要複製的數組或引用創建辦? – TLP
一個更好的問題是,爲什麼你首先有4個獨立的數組? – cjm
我想複製數組 – Nurahmad