在Perl中计算数组元素

前端之家收集整理的这篇文章主要介绍了在Perl中计算数组元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何获取数组中的总项目,而不是最后一个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值。

猜你在找的Perl相关文章