我似乎遇到了几种不同的方法来计算数组的大小。这三种方法的区别是什么?
my @arr = (2);
print scalar @arr; # First way to print array size
print $#arr; # Second way to print array size
my $arrSize = @arr;
print $arrSize; # Third way to print array size
发布于 2011-09-14 02:44:05
第一种和第三种方法是相同的:它们在标量上下文中计算数组。我认为这是获取数组大小的标准方法。
第二种方法实际上返回数组的最后一个索引,它(通常)与数组大小不同。
发布于 2011-09-14 03:00:34
首先,第二个不等同于其他两个。$#array
返回数组的最后一个索引,它比数组的大小小1。
其他两个实际上是相同的。您只是使用了两种不同的方法来创建标量上下文。这归结为可读性问题。
我个人更喜欢以下几点:
say 0+@array; # Represent @array as a number
我发现它比
say scalar(@array); # Represent @array as a scalar
和
my $size = @array;
say $size;
后者单独看起来非常清晰,但我发现,当其他代码的一部分时,额外的行会降低清晰度。它对于讲解@array
在标量上下文中的作用很有用,如果您想多次使用$size
,那么它也很有用。
发布于 2011-09-14 02:44:36
这通过强制数组进入标量上下文来获取大小,在标量上下文中,数组的大小被计算为它的大小:
print scalar @arr;
这是强制数组进入标量上下文的另一种方式,因为它被分配给标量变量:
my $arrSize = @arr;
这将获得数组中最后一个元素的索引,因此它实际上是大小减1(假设索引从0开始,这在Perl中是可调整的,尽管这样做通常不是一个好主意):
print $#arr;
最后一个并不适合用来获取数组大小。如果您只想获取数组的最后一个元素,那么它将非常有用:
my $lastElement = $arr[$#arr];
此外,正如你在Stack Overflow上看到的那样,大多数语法高亮显示程序都不能正确处理这个结构……
https://stackoverflow.com/questions/7406807
复制相似问题