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
}有没有一种方法可以像范围运算符一样快速地减少数字,而不是增加数字?
发布于 2014-10-22 19:09:10
不好的解决方案,
for (my $i=1_000_000; $i >= 1; $i--) {
print "$i\n";
}发布于 2014-10-22 19:22:10
你可以从一个大于范围顶部的数字中减去你得到的数字:
foreach (1 .. 1_000_000) {
my $n = 1_000_001 - $_;
...
}和
for (-1_000_000 .. -1) {
my $n = -$_;
...
}发布于 2014-10-22 19:34:44
虽然for很好,但while可能更适合。
my $n = 1_000_000;
while ($n >= 1) {
...
} continue { # continue block will always be called, even if next is used
$n--;
}https://stackoverflow.com/questions/26505835
复制相似问题