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
}
有没有一种方法可以像范围算子一样漂亮和快速地减少数字,而不是增加数字?
答案 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--;
}