2013-03-27 120 views
0

我想在矢量的末尾添加一個數字「1」或「0」的元素。讓我們說,我有兩種不同長度的2D矢量等在矢量的末尾添加一個元素

vector[0][0] = 1 
vector[0][1] = 3 
vector[1][0] = 2 
vector[1][1] = 4 
vector[1][2] = 5 

我想在每個矢量的端的數目增加(基於如果命令)1或0;輸出是前人的精力:

vector[0][0] = 1 
vector[0][1] = 3 
vector[0][2] = 1 
vector[1][0] = 2 
vector[1][1] = 4 
vector[1][2] = 5 
vector[1][3] = 0 

在其中加入新的元素是vector[0][2] = 1vector[1][3]=0

我想somenthing喜歡的:

for my $i (0..$#vector) { 
    for my $j (0..$#{ $vector[$i] }) { 
    if($prob_friendship > (my $random_number=rand())) { 
     push @{ $vector[$i][$j] }, 1; 
    } 
    else { 
     push @{ $vector[$i][$j] }, 0; 
     } 
    } 
} 

,但它給我的錯誤Can't use string ("1") as an ARRAY ref while "strict refs" in use at distribuzione2.pl line 42, <STDIN> line 5.

任何幫助嗎?


$prob_friendship值在輸入由keyborad

回答

2

給沒有必要對嵌套循環,你只需要遍歷第一個數組索引。

您只需重複使用$i你現在的樣子,然後用push @{$vector[$i]}, ...

或者,如果你實際上並不需要知道數組索引(與道具@ TLP的答案),你可以直接通過迭代存儲在@vector第一維的各個引用,並做了整個事情的三條線:

for my $ref (@vector) { 
    push @$ref, ($prob_friendship > rand()) ? 1 : 0; 
} 
+0

我推薦'push @ {$ vector [$ i]},...;'因爲'push $ vector [$ i],...;'是'高度實驗',因此它只適用於一些陣列。 – ikegami 2013-03-27 09:58:26

+0

@ikegami應該可以在一個普通的未經過數組的數組上運行,但我已經回到原來的語法,因爲您建議。 – Alnitak 2013-03-27 10:00:02

2

你可以只使用數組裁判,他們分別是:

for my $aref (@vector) {  # will iterate over array refs 
    if ($prob > rand()) { 
     push @$aref, 1;  # dereferencing the aref 
    } else { 
     push @$aref, 0; 
    } 
}