【问题标题】:How to loop through an array for subset of elements (in reverse order) in perl如何在perl中循环遍历元素子集的数组(以相反的顺序)
【发布时间】:2020-01-16 10:45:20
【问题描述】:

我有一个数组如下。需要以相反的顺序打印中间元素(元素索引 5 到元素索引 0)。

my @array  = ( 1 .. 10 );

我需要的输出:

5
4
3
2
1

我尝试了下面的代码。但它不打印任何东西。

#!/usr/bin/perl
my @array = (1 .. 10);

for $k (5 .. 0){
    print "$array[$k]\n";
}

【问题讨论】:

    标签: arrays perl for-loop


    【解决方案1】:

    您的代码的问题是表达式 (5 .. 0) 没有返回任何内容,因为它意味着起始数字大于结尾。

    您可以运行以下代码 sn-p 来查看问题(没有打印出来):

    print for (5 .. 0);
    

    为此,您需要使用list operator reverse

    print for (reverse 0 .. 5);
    

    要考虑的另一件事:在 Perl 中,数组的第一个元素的索引为 0。因此,您要查找的列表是 (0 ..4) 而不是 (0 .. 5)

    这是您的更新代码:

    my @array = (1 .. 10);
    for my $k (reverse 0 .. 4) {
        print "$array[$k]\n";
    }
    

    旁注:always use strict and use warnings。在这些 pragma 下,您的代码将失败变量 $k 未在代码中声明:它应该是 for my $k ... 而不是 for $k ...

    这也可以用更短的形式表示:

    my @array = (1 .. 10);
    print "$array[$_]\n" for (reverse 0 .. 4);
    

    旁注#2:可以修改代码,使其根据数组的长度动态计算应打印哪些项目。为此,您可以使用表达式$#array,它返回数组中最高索引的值。

    考虑:

    print "$array[$_]\n" for (reverse 0 .. $#array/2);
    

    如果您的数组是(1 .. 11)(即元素的数量不均匀),则会打印:

    6
    5
    4
    3
    2
    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-29
      • 2012-07-27
      • 2016-05-19
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      相关资源
      最近更新 更多