0

我想在已经存在许多元素的向量末尾添加数字“1”或“0”。假设我有不同长度的二维向量,比如

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

我想在每个向量的末尾添加数字 1 或 0(基于 if 命令);输出应该是:

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

我想到了类似的东西:

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值在键盘​​输入中给出

4

2 回答 2

2

您可以按原样使用数组引用:

for my $aref (@vector) {      # will iterate over array refs
    if ($prob > rand()) {
        push @$aref, 1;       # dereferencing the aref
    } else {
        push @$aref, 0;
    }
}
于 2013-03-27T09:53:18.790 回答
2

不需要嵌套循环,您只需要遍历第一个数组索引。

您可以像现在一样迭代使用$i,然后使用push @{$vector[$i]}, ...

或者,如果您实际上不需要知道数组索引(并且使用@TLP 答案的道具),您可以直接遍历存储在第一个维度中的各个引用,@vector并在三行中完成整个操作:

for my $ref (@vector) {
    push @$ref, ($prob_friendship > rand()) ? 1 : 0;
}
于 2013-03-27T09:44:28.257 回答