在数组中输入索引号

时间:2012-11-28 04:54:40

标签: arrays perl

我有7个以下列方式定义的数组:

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

然后:

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

七个数组中的每一个都有大约25个元素,即$ array1 [0]到$ array1 [24]。我需要经常在各种脚本中更改这些数组的内容。有时,因为数组的顺序是必不可少的,我需要重新排列数组索引的顺序或删除某个位置的元素。这是一个真正的痛苦,因为我需要更改所有后续数组的索引。只是为了说清楚,如果我删除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,对于7个数组中的每个数组的下一个元素将被2替换为...(最多24个元素)。

除了使用哈希和Tie :: Hash之外,是否有解决此问题的方法?

修改 好的,让我澄清一下。我正在寻找一个脚本维护解决方案,没有关于脚本输出的解决方案。我需要经常自己(手动)更改脚本,并且我不想在每次更改这些数组中的内容时手动更改所有7个数组的所有24个位置的数字。所以我的问题是,有没有办法让脚本将索引所有数组的所有位置的数字归结为?

使用push作为mvp建议是一个合适的解决方案。有没有其他解决方案可能涉及循环或其他东西,而不是使用push 7X24次?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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";
    }
}