Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在“循环数组”中迭代子范围?_Arrays_Perl_Range_Cycle - Fatal编程技术网

Arrays 如何在“循环数组”中迭代子范围?

Arrays 如何在“循环数组”中迭代子范围?,arrays,perl,range,cycle,Arrays,Perl,Range,Cycle,我正在尝试编写以下perl子例程。给定一个长度为n的数组a,数组0中的索引i您可以使用range运算符获得一个索引列表。。通过从$i中减去上游窗口并将下游窗口添加到$i。如果不需要$ith值,则需要记住在迭代器等于$i时跳过迭代器 您需要使用模运算符%将索引保持在数组的边界内。给定大小为11的数组,我们可以看到,通过使用11修改索引,它将始终指向数组中的正确位置: #!/usr/bin/perl use strict; use warnings; for my $i (-22 .. 22)

我正在尝试编写以下perl子例程。给定一个长度为n的数组a,数组0中的索引i您可以使用range运算符获得一个索引列表。。通过从$i中减去上游窗口并将下游窗口添加到$i。如果不需要$ith值,则需要记住在迭代器等于$i时跳过迭代器

您需要使用模运算符%将索引保持在数组的边界内。给定大小为11的数组,我们可以看到,通过使用11修改索引,它将始终指向数组中的正确位置:

#!/usr/bin/perl

use strict;
use warnings;

for my $i (-22 .. 22) {
    print "$i => ", $i % 11, "\n";
}
由于Perl 5更改了模在那里使用的算法,因此,您可能会遇到大数字的问题,即大于平台在无符号整数中容纳的数字。它变得更像C的fmod,但有一些不同

您可能还希望不使用pragma。它使%的速度加快,但您可以得到C模运算符的行为。ANSI和ISO都没有定义C应该如何处理负数,因此您可能会或可能不会返回有效的索引。当然,只要C的版本也能吐出来

X   -5 -4 -3 -2 -1 0 1
X%5  0 -4 -3 -2 -1 0 1

如果不是很方便携带,也可以


它看起来像是返回第二种情况,只要perl使用C99编译器编译并带有C99标志,那么使用整数pragma应该是安全的。

您可以使用range操作符获得标记列表。。通过从$i中减去上游窗口并将下游窗口添加到$i。如果不需要$ith值,则需要记住在迭代器等于$i时跳过迭代器

您需要使用模运算符%将索引保持在数组的边界内。给定大小为11的数组,我们可以看到,通过使用11修改索引,它将始终指向数组中的正确位置:

#!/usr/bin/perl

use strict;
use warnings;

for my $i (-22 .. 22) {
    print "$i => ", $i % 11, "\n";
}
由于Perl 5更改了模在那里使用的算法,因此,您可能会遇到大数字的问题,即大于平台在无符号整数中容纳的数字。它变得更像C的fmod,但有一些不同

您可能还希望不使用pragma。它使%的速度加快,但您可以得到C模运算符的行为。ANSI和ISO都没有定义C应该如何处理负数,因此您可能会或可能不会返回有效的索引。当然,只要C的版本也能吐出来

X   -5 -4 -3 -2 -1 0 1
X%5  0 -4 -3 -2 -1 0 1

如果不是很方便携带,也可以


它似乎返回第二种情况,只要perl使用带有C99标志的C99编译器编译,就可以安全地使用整数pragma。

这听起来像是我的家庭作业。你能发布你写过的代码吗?这不是家庭作业。。。我这几天已经过去了,不过谢谢。这听起来像是家庭作业。你能发布你写过的代码吗?这不是家庭作业。。。这几天我已经过去了,但是谢谢。这考虑到了下界之外的问题,但是我的例子中的上界呢?我将尝试阅读a[10],a[11]等等,其中lengtha==10。@David B是的,我错过了那个案例。修正方法是使用%,这使得负索引也变得不相关。这会考虑下限之外的情况,但在我的示例中,上限如何-我将尝试阅读a[10],a[11]等,其中lengtha==10。@David B是的,我错过了这个案例。解决方法是使用%,这使得负面索引也变得无关紧要。