gpt4 book ai didi

perl - Perl 中的数组元素计数

转载 作者:行者123 更新时间:2023-12-03 10:07:25 26 4
gpt4 key购买 nike

如何获取数组中的总项目数,而不是最后一个 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 - Perl 中的数组元素计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/863426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com