如何在 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 %hashprint '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 中找到哈希中的键数?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算匹配模式的键数?

在 Perl 中如何使用变量作为哈希键?

如何计算嵌入式mongodb文档中的键数

将 perl 正则表达式中的键和值传递给哈希

从 Perl 中的哈希中获取具有最高值的键的最简单方法是啥?

如何在 Perl 中组合哈希?