我想在向量的末尾添加数字“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(基于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] = 1
和vector[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.
任何帮助?
keyborad
输入中给出$prob_friendship
值
答案 0 :(得分:2)
不需要嵌套循环,只需迭代第一个数组索引。
您可以像现在一样使用$i
进行迭代,然后使用push @{$vector[$i]}, ...
或者,如果您实际上不需要知道数组索引(以及使用@TKP答案的道具),您可以直接遍历存储在@vector
的第一维中的各个引用,并执行整个操作三行:
for my $ref (@vector) {
push @$ref, ($prob_friendship > rand()) ? 1 : 0;
}
答案 1 :(得分:2)
您可以按原样使用数组引用:
for my $aref (@vector) { # will iterate over array refs
if ($prob > rand()) {
push @$aref, 1; # dereferencing the aref
} else {
push @$aref, 0;
}
}