【问题标题】:How to create a dynamic array of arrays in Perl?如何在 Perl 中创建动态数组?
【发布时间】:2014-12-05 01:02:00
【问题描述】:

我已经将两个数组用于复杂的 XML 解析脚本。我正在使用这个访问两个数组:

my @packageNames = (\@listOfValuesRetail, \@listOfValuesAdvisor);

稍后我有一个循环读取值并执行操作。效果很好。

但是,我刚刚得到一个新要求,即我使用的输出循环必须采用一个、另一个或两个数组。

由于上面的行是硬编码的,我认为简单的做法是只将我需要的数组推送到一个新数组 @packageNames 中,然后循环遍历它们:

        # add this array to the package name array
        if (@listOfValuesRetail) {
            push(@packageNames, \@listOfValuesRetail);
        }

        # add this array to the package name array
        if (@listOfValuesAdvisor) {
            push(@packageNames, \@listOfValuesAdvisor);
        }

等等。但是当我这样做并运行脚本时,我的所有输出都会重复 10 倍以上。

调用当前硬编码数组的循环是这样的:

my $length = scalar @packageNames;
for (my $x = 0; $x < $length; $x++) {

    print "Processing package " . ($x+1) . "\n";

    # make an easy to read variable for the current array iteration
    my $currentPackage = $packageNames[$x];

    ...do stuff...
)

因此,如果我有它们,循环已经可以使用更多的数组,但是我仍然坚持对它们进行硬编码,因为我不知道如何将数组放入数组中,然后让它使用这个简单的方法看起来没有它以某种方式多次给我数据,就像它正在读取数组的长度而不是内容或其他东西。不确定。

这看起来很简单……它是怎么做的?

【问题讨论】:

  • 只要@packageNames 开始为空,如果@listOfValuesRetail@listOfValuesAdvisor 均非空,则您的两次推送完全 等同于原始定义。您所展示的内容中没有任何内容会导致 “我的所有输出都像 10 倍以上,重复” 所以我怀疑您已将两个 if 语句放在一个循环中。另请注意,在您的 for 循环中,$x 将永远是 0 和 1。我认为您需要显示程序的其余部分。
  • 哇。它并没有脱离循环,我认为它是。我读了你的陈述并说不,但我会检查的。繁荣,就是上面的“添加这个数组”部分在读取 XML 并对其进行排序的循环中。非常感谢。惊人的。花了几个小时……太简单了。
  • 好的,我很高兴它已排序。我已将其作为解决方案发布。

标签: arrays perl loops dynamic-arrays


【解决方案1】:

只要@packageNames 开始时为空,如果@listOfValuesRetail@listOfValuesAdvisor 均非空,则您的两次推送与原始定义完全相同。

您所展示的内容中没有任何内容会导致“我的所有输出都像 10 倍以上,重复”,所以我怀疑您已将两个 if 语句放入一个循环中。另请注意,在您的 for 循环中,$x 将永远是 0 和 1。

我认为您需要展示程序的其余部分。

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 2011-04-02
    • 2014-04-13
    • 2017-06-01
    • 2019-12-14
    • 2015-11-15
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多