2013-03-27 78 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; 
    } 
}