如何在 Perl 中找到哈希中的键数?
Posted
技术标签:
【中文标题】如何在 Perl 中找到哈希中的键数?【英文标题】:How can I find the number of keys in a hash in Perl? 【发布时间】:2010-11-09 16:39:52 【问题描述】:如何找到散列中的键数,例如对数组使用 $#
?
【问题讨论】:
【参考方案1】:scalar keys %hash
或者只是
keys %hash
如果您已经在标量上下文中,例如my $hash_count = keys %hash
或 print 'bighash' if keys %hash > 1000
。
顺便说一句,$#array
没有找到元素的数量,它找到了最后一个索引。 scalar @array
查找元素的数量。
【讨论】:
$#+1 - 我们不会得到元素。我的意思是 $# 啊,我明白了。好吧,我仍然会推荐scalar @array
而不是$#array + 1
。 :)
有什么特别的原因吗
当然,如果您在标量上下文中使用keys
,例如在对标量或条件的赋值中,您甚至不需要 scalar
使这更加简单。
@Krish: $#arr + 1
会给你数组中元素的数量,如果$[ == 0
(见perldoc perlvar
)【参考方案2】:
我们也可以这样使用
my $keys = keys(%r) ;
print "keys = $keys" ;
0+(keys %r)
【讨论】:
我在so中发帖后发现了这个【参考方案3】:但不是在 Perl 5.10 之后:
use feature ":5.10";
my %p = ();
say $#%p;
# $# is no longer supported
还有更糟的:
use feature ":5.10";
my %p = (a=>1, b=>2, c=>3);
say $#%p;
# -1
【讨论】:
【参考方案4】:print scalar keys %hash;
或
$X = keys %hash;
print $X;
keys %hash
返回列表上下文中键的值,该值进一步更改为标量上下文(分配给标量变量时)。
【讨论】:
这个答案与接受的答案有何不同?【参考方案5】:这将非常简单,适用于任何大小的哈希。
打印标量键 %hash;
【讨论】:
对不起,但是......这与 7 年前发布的高度赞成、接受的答案有何不同,而不是使用print
?以上是关于如何在 Perl 中找到哈希中的键数?的主要内容,如果未能解决你的问题,请参考以下文章