Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 perl脚本循环中的数组大小_Arrays_Perl - Fatal编程技术网

Arrays perl脚本循环中的数组大小

Arrays perl脚本循环中的数组大小,arrays,perl,Arrays,Perl,我使用下面的命令来查找数组的大小 $size_x = @x; 或 当我在简单语句中使用时,两者都很好地工作。但当我在循环中使用它们时,大小会变大一个数字。为什么会这样。下面是一个例子: for ($i=1;$i<=10;$i++){ if (1**2+2**2>=1){ @x[$i] =2+3; $size_x = @x; } print "my size is $size_x\n"; } 我认为答案应该是1到10,而不是2到11。正确获取尺码的更好方法是什么?谢谢 我认为Pe

我使用下面的命令来查找数组的大小

$size_x = @x;

当我在简单语句中使用时,两者都很好地工作。但当我在循环中使用它们时,大小会变大一个数字。为什么会这样。下面是一个例子:

for ($i=1;$i<=10;$i++){

if (1**2+2**2>=1){
@x[$i] =2+3;
$size_x = @x;
}
print "my size is $size_x\n";
}

我认为答案应该是1到10,而不是2到11。正确获取尺码的更好方法是什么?谢谢

我认为Perl数组是基于零的,这意味着第一个元素是在索引0处存储和访问的。这是您的
for
循环:

for ($i=1; $i<=10; $i++) {
    if (1**2+2**2>=1) {
        @x[$i] =2+3;
        $size_x = @x;
    }
    print "my size is $size_x\n";
}

我相信Perl数组是基于零的,这意味着第一个元素是在索引0处存储和访问的。这是您的
for
循环:

for ($i=1; $i<=10; $i++) {
    if (1**2+2**2>=1) {
        @x[$i] =2+3;
        $size_x = @x;
    }
    print "my size is $size_x\n";
}

从1开始索引时,大小将自动增加1。尝试从0或0开始索引

@x[$i-1] =2+3;

从1开始索引时,大小将自动增加1。尝试从0或0开始索引

@x[$i-1] =2+3;

在阅读了您的代码之后,我真的不知道您在这里尝试做什么,但是如果您尝试创建一个包含11个元素的数组,并将所有元素分配给
5
,除了第一个元素,那么您做得非常好。或许可以看到您创建的阵列的可视化:

[undef, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
如果这真的是你所希望的,有更快/更简单/更好的方法来做同样的事情,但我必须相信你在尝试完成其他事情。在非常基本的层面上:

正规数组是按数字索引的标量的有序列表,从 与0

话虽如此,您在Perl代码中很少看到C风格的
for
循环,这是因为它很少是必需的。更常见的情况是,您会看到以下内容:

for (0 .. 9) {
    # do something...
}
该代码使用一个
foreach
样式的循环和(
)生成一个序列(从技术上讲,是一个从左到右的值列表,按一进行计数)。关于循环就够了。让我们谈谈你奇怪的逻辑

12+22将始终为5,这将始终大于1。2+3也是如此。这段代码没有任何动态性,这就是为什么我认为您打算在计算中使用循环迭代器的原因。否则,您可以很容易地在一行中用一组5填充一个10元素数组:

my @x = (5) x 10;
现在,最后一点适用于此代码和从此点开始编写的所有Perl代码。每个文件的顶部都有以下两行:

use strict;
use warnings;

在阅读了您的代码之后,我真的不知道您在这里尝试做什么,但是如果您尝试创建一个包含11个元素的数组,并将所有元素分配给
5
,除了第一个元素,那么您做得非常好。或许可以看到您创建的阵列的可视化:

[undef, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
如果这真的是你所希望的,有更快/更简单/更好的方法来做同样的事情,但我必须相信你在尝试完成其他事情。在非常基本的层面上:

正规数组是按数字索引的标量的有序列表,从 与0

话虽如此,您在Perl代码中很少看到C风格的
for
循环,这是因为它很少是必需的。更常见的情况是,您会看到以下内容:

for (0 .. 9) {
    # do something...
}
该代码使用一个
foreach
样式的循环和(
)生成一个序列(从技术上讲,是一个从左到右的值列表,按一进行计数)。关于循环就够了。让我们谈谈你奇怪的逻辑

12+22将始终为5,这将始终大于1。2+3也是如此。这段代码没有任何动态性,这就是为什么我认为您打算在计算中使用循环迭代器的原因。否则,您可以很容易地在一行中用一组5填充一个10元素数组:

my @x = (5) x 10;
现在,最后一点适用于此代码和从此点开始编写的所有Perl代码。每个文件的顶部都有以下两行:

use strict;
use warnings;
作为旁注: Perl中的数组元素以$开头,而不是@。 因此
@x
是整个数组,而
$x[$i]
是数组
@x
的第
$i
个元素

使用警告应该对此发出警告

(我知道这与其说是一个答案,不如说是一个评论,但作为一个新手,我还不被允许发表评论。对不起。)

作为旁注: Perl中的数组元素以$开头,而不是@。 因此
@x
是整个数组,而
$x[$i]
是数组
@x
的第
$i
个元素

使用警告应该对此发出警告


(我知道这与其说是一个答案,不如说是一个评论,但作为一个新手,我还不被允许发表评论。对不起。)

从技术上讲是正确的,尽管不是无效的,因为它基本上是一个数组切片,只切片一个元素。(也不是问题的根本原因,因此它不能很好地回答问题,正如您所指出的。)从技术上讲,这是正确的,但不是无效的,因为它基本上是一个数组切片,只切片一个元素。(也不是问题的根本原因,因此正如您所指出的,它无法很好地回答问题。)