范围运算符从最大到最小递减:10..1

时间:2014-10-22 10:53:31

标签: perl

Perl有一个范围运算符,在foreach循环中使用时,不会创建临时数组:

foreach (1 .. 1_000_000) {
    # code
}

如果第一个整数小于第二个整数,则不运行迭代:

foreach (1_000_000 .. 1) {
    # code here never runs
}

我可以使用内置的reverse,但这样可以保持不创建临时数组的优化吗?

foreach (reverse 1 .. 1_000_000) {
    # code
}

有没有一种方法可以像范围算子一样漂亮和快速地减少数字,而不是增加数字?

3 个答案:

答案 0 :(得分:3)

非常漂亮的解决方案,

for (my $i=1_000_000; $i >= 1; $i--) {

   print "$i\n";
}

答案 1 :(得分:3)

foreach (1 .. 1_000_000) {
    my $n = 1_000_001 - $_;
    ...
}

for (-1_000_000 .. -1) {
    my $n = -$_;
    ...
}

答案 2 :(得分:3)

虽然for很好,while可能更适合。

my $n = 1_000_000;
while ($n >= 1) {
    ...
} continue {  # continue block will always be called, even if next is used
    $n--;
}