首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Perl中查找数组的大小

在Perl中查找数组的大小
EN

Stack Overflow用户
提问于 2011-09-14 02:40:47
回答 8查看 600.6K关注 0票数 262

我似乎遇到了几种不同的方法来计算数组的大小。这三种方法的区别是什么?

代码语言:javascript
复制
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
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-09-14 02:44:05

第一种和第三种方法是相同的:它们在标量上下文中计算数组。我认为这是获取数组大小的标准方法。

第二种方法实际上返回数组的最后一个索引,它(通常)与数组大小不同。

票数 249
EN

Stack Overflow用户

发布于 2011-09-14 03:00:34

首先,第二个不等同于其他两个。$#array返回数组的最后一个索引,它比数组的大小小1。

其他两个实际上是相同的。您只是使用了两种不同的方法来创建标量上下文。这归结为可读性问题。

我个人更喜欢以下几点:

代码语言:javascript
复制
say 0+@array;          # Represent @array as a number

我发现它比

代码语言:javascript
复制
say scalar(@array);    # Represent @array as a scalar

代码语言:javascript
复制
my $size = @array;
say $size;

后者单独看起来非常清晰,但我发现,当其他代码的一部分时,额外的行会降低清晰度。它对于讲解@array在标量上下文中的作用很有用,如果您想多次使用$size,那么它也很有用。

票数 45
EN

Stack Overflow用户

发布于 2011-09-14 02:44:36

这通过强制数组进入标量上下文来获取大小,在标量上下文中,数组的大小被计算为它的大小:

代码语言:javascript
复制
print scalar @arr;

这是强制数组进入标量上下文的另一种方式,因为它被分配给标量变量:

代码语言:javascript
复制
my $arrSize = @arr;

这将获得数组中最后一个元素的索引,因此它实际上是大小减1(假设索引从0开始,这在Perl中是可调整的,尽管这样做通常不是一个好主意):

代码语言:javascript
复制
print $#arr;

最后一个并不适合用来获取数组大小。如果您只想获取数组的最后一个元素,那么它将非常有用:

代码语言:javascript
复制
my $lastElement = $arr[$#arr];

此外,正如你在Stack Overflow上看到的那样,大多数语法高亮显示程序都不能正确处理这个结构……

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7406807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档