27 9月 2007

[Perl] 做出2維陣列

Perl有@var的1維Array
這是大家所熟悉的
至於要如何做出2維的Array呢?

在Perl裡面
如果@var是1維
那麼@@var就是2維!? 錯了!大錯特錯.... 我一開始就是這麼想的...Embarassed


其實Perl的2維陣列 是透過reference(參照)所產生出來的
ex:
my @one_dim = split(/ /, "a b c d e");
my @two_dim = (); # 此時的@two_dim還是1維的
$two_dim[0] = @one_dim; # @即是Reference, 此時的@two_dim就變2維的了!
for(my $i=0 ; $i<5 ; $i++ ){
print $two_dim[0][$i];
}

不過,這種方法有幾個缺點

缺點一:
就是,這種方法是利用「Reference」!
所以$two_dim[0]是參考了@one_dim的東西
而不是整個複製過來
因此,如果@one_dim的東西改變了
$two_dim[0]的東西(實際上也就是@one_dim的東西)也就跟著改變了!!!

缺點二:無法用foreach取得$two_dim[0]的個數
foreach( $two_dim[0] ){...}
這樣就變得很麻煩了...
如果當@two_dim有很多個element時
每一個element都需要一個1維的變數在儲存才行
而且這每一個element的名稱都要不一樣...這樣就會有砂鍋大的問題了!!!

沒有留言: