加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl中计算数组元素

发布时间:2020-12-15 21:24:22 所属栏目:大数据 来源:网络整理
导读:如何获取数组中的总项目,而不是最后一个ID? 没有两种方式我发现做这个工作: my @a;# Add some elements (no consecutive ids)$a[0]= '1';$a[5]= '2';$a[23]= '3';print $#a,"n"; # Prints 23print scalar(@a),"n"; # Prints 24 我希望得到3 … 解决方法
如何获取数组中的总项目,而不是最后一个ID?

没有两种方式我发现做这个工作:

my @a;
# Add some elements (no consecutive ids)
$a[0]= '1';
$a[5]= '2';
$a[23]= '3';

print $#a,"n"; # Prints 23
print scalar(@a),"n"; # Prints 24

我希望得到3 …

解决方法

编辑:哈希与阵列

正如cincodenada在注释中正确指出的,ysth给了一个更好的答案:我应该用另一个问题回答你的问题:“你真的想使用Perl数组吗?哈希可能更合适。

数组为所有可能的索引分配内存,直到到目前为止使用的最大。在您的示例中,您分配24个单元格(但只使用3)。相比之下,散列仅为实际使用的那些字段分配空间。

数组解:标量grep

这里有两个可能的解决方案(见下面的解释):

print scalar(grep {defined $_} @a),"n";  # prints 3
print scalar(grep $_,@a),"n";            # prints 3

说明:在添加$ a [23]之后,你的数组真的包含24个元素,但是大多数是未定义的(它也计算为false)。您可以计算定义元素的数量(如第一个解决方案中所做的)或真实元素的数量(第二个解决方案)。

有什么不同?如果你设置$ a [10] = 0,那么第一个解决方案会计数,但第二个解决方案不会(因为0是假的,但是定义)。如果你设置$ a [3] = undef,解决方案都不会计算。

哈希解(由yst)

正如另一个解决方案所建议的,你可以使用哈希并避免所有的问题:

$a{0}  = 1;
$a{5}  = 2;
$a{23} = 3;
print scalar(keys %a),"n";  # prints 3

此解决方案计算零值和undef值。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读