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の数字を追加したいと思います(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.

何か助けはありますか?


$prob_friendship値はkeyboradによって入力で与えられます

4

2 に答える 2

2

ネストされたループは必要ありません。最初の配列インデックスを反復処理するだけで済みます。

今のように使用を繰り返すことができ$i、次に使用することができますpush @{$vector[$i]}, ...

または、配列インデックスを実際に知る必要がない場合(および@TLPの回答に対する小道具を使用)、の最初の次元に格納されている個々の参照を直接反復して@vector、3行ですべてを実行できます。

for my $ref (@vector) {
    push @$ref, ($prob_friendship > rand()) ? 1 : 0;
}
于 2013-03-27T09:44:28.257 に答える
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 に答える