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
个元素
使用警告代码>应该对此发出警告
(我知道这与其说是一个答案,不如说是一个评论,但作为一个新手,我还不被允许发表评论。对不起。)从技术上讲是正确的,尽管不是无效的,因为它基本上是一个数组切片,只切片一个元素。(也不是问题的根本原因,因此它不能很好地回答问题,正如您所指出的。)从技术上讲,这是正确的,但不是无效的,因为它基本上是一个数组切片,只切片一个元素。(也不是问题的根本原因,因此正如您所指出的,它无法很好地回答问题。)