0

次の方法で定義された 7 つの配列があります。

my @array1 = ();
..
my @array7 = ();

その後:

$array1[0] = "text goes here";
..
$array7[0] = "text goes here";

$array1[0] から $array1[24] までの 7 つの配列には、それぞれ約 25 個の要素があります。さまざまなスクリプトでこれらの配列の内容を頻繁に変更する必要があります。また、配列の順序が重要であるため、配列インデックスの順序を並べ替えたり、ある位置の要素を削除したりする必要がある場合もあります。後続のすべての配列のインデックスを変更する必要があるため、これは本当に面倒です。明確にするために、array1[12] を削除する場合、$array1[13] を $array1[12] に変更する必要があり、7 つの配列すべてと後続のすべてのインデックス位置について (または array1[ の内容を移動します) 13] から array1[12] など)

だから私の質問は、後で各配列インデックスを修正することなく、配列の位置を切り替えることができるように、配列のインデックスを代入することは可能ですか? このようなもの:

$array1[$_] = "text 1 goes here";
..
$array7[$_] = "other text 1 goes here";

その後:

$array1[$_] = "text 2 goes here";
..
$array7[$_] = "other text 2 goes here";

$_ は、7 つの配列のそれぞれの最初のインデックスに対して 1 に置き換えられ、7 つの配列のそれぞれの次の要素に対して 2 に置き換えられます... (最大 24 要素)。

ハッシュと Tie::Hash を使用する以外に、この問題の解決策はありますか?

編集 OK、明確にさせてください。スクリプトの出力に関するソリューションではなく、スクリプトのメンテナンス ソリューションを探しています。スクリプトを自分で (手動で) 頻繁に変更する必要があり、これらの配列で何かを変更するたびに、7 つの配列すべての 24 の位置すべてのインデックス番号を手動で変更したくありません。だから私の質問は、すべての配列のすべての位置にインデックスを付ける数値をスクリプトに代入させる方法はありますか?

mvpが示唆していたようにプッシュを使用することは、適切な解決策になるでしょう。push 7X24 回を使用するのではなく、ループなどを含む可能性のある他のソリューションはありますか?

4

2 に答える 2

5

あなたの質問が何であるかよくわかりません。あなたはおそらく物事をかなり複雑にしています。お探しspliceですか?

my @a = (1 .. 4);
splice @a, 2, 1;    # remove 1 element, starting at index 2
# @a is now 1, 2, 4

splice要素を挿入したり、複数の要素を削除したりすることもできます:

splice ARRAY or EXPR, OFFSET, LENGTH, LIST
于 2012-11-28T05:06:40.913 に答える
0

このアプローチを使用できます。

my @array1;
push @array1, "text 1 goes here";
push @array1, "other text 1 goes here";
# ...
# or you can use loop as well:
for my $i (1..10) {
    push @array1, "text 1 instance $i goes here";
}

# do it for another one:
my @array2;
push @array2, "text 2 goes here";
push @array2, "other text 2 goes here";
# ...

これを行うこともできます(動的変数のために少し厄介です):

for my $i (1..7) {
    for my $j (1..24) {
         push @{"array$i"}, "text $i, instance $j goes here";
    }
}
于 2012-11-28T22:21:28.153 に答える