Hash 如何获取perl 6%哈希中的键数?

Hash 如何获取perl 6%哈希中的键数?,hash,count,raku,Hash,Count,Raku,在PERL 6中,有人能帮助了解如何计算散列中的键数吗?寻找没有手动循环的东西 提前谢谢 编辑:尝试了以下操作,但没有成功 my %hash = 1 => "one", 2 => <21,22,23>, 3 => "three" ; my $count = %hash.keys [ makes it a flat list ] my $count = %hash.count [no such method] my $count = keys %hash [pr

在PERL 6中,有人能帮助了解如何计算散列中的键数吗?寻找没有手动循环的东西

提前谢谢

编辑:尝试了以下操作,但没有成功

my %hash =  1 => "one", 2 => <21,22,23>, 3 => "three"  ;

my $count = %hash.keys [ makes it a flat list ]
my $count = %hash.count [no such method]
my $count = keys %hash [provides all the keys but not the count]
my%hash=1=>“一”,2=>,3=>“三”;
my$count=%hash.keys[使其成为一个平面列表]
my$count=%hash.count[没有这样的方法]
my$count=keys%hash[提供所有键,但不提供计数]

此答案哈希已在OP编辑之前发布:

您的哈希初始化有问题

my  %hash = {"1" => "one", "2" => "21,22,23", "3" => "three"} ;
应该是

my  %hash = ("1" => "one", "2" => "21,22,23", "3" => "three") ;
现在要回答您的实际问题,请尝试:

试试这个:

$count=1;
for %hash.keys.sort -> $key {  #no need to sort though
       # say "$key %hash{$key}";
        $count++;
    }
print "$count\n";

多亏了IRC Perl 6聊天社区,这是一种使用本机/内置函数/方法计算哈希键数量的方法

%_Host@User> ./h.p6
Count is 3
Count is 3
%_Host@User>
%_Host@User> cat h.p6
#!/usr/bin/perl6

use v6 ;

my %hash = (1 => <1 2 3>, 2 => "ljsf", 3 => "AFDS") ;

say "Count is " ~ +%hash ;
say "Count is " ~ %hash.elems ;
%_Host@User>
%_Host@User>/h.p6
计数是3
计数是3
%_Host@User>
%_Host@User>h.p6类
#!/usr/bin/perl6
使用v6;
我的%hash=(1=>,2=>“ljsf”,3=>“AFDS”);
说“Count是”~+%hash;
说“Count is”~%hash.elems;
%_Host@User>

谢谢。

在perl5中,您只需将哈希转换为标量,它就会成为计数。您也可以在perl6中执行此操作:

%hash.Int;  
# => 3
+%hash
# => 3
还有elems方法:

%hash.elems;  
# => 3
散列是,因此您甚至可以避免调用,只使用散列作为数字:

my %h = :42a, :72b;
say +%h; # 2
say "We need {42 + %h} spaces to store stuff"; # We need 44 spaces to store stuff

嗨,这是写给Perl5还是Perl6的?标量(键%hash)似乎不起作用。顺便提一下散列声明只是为了演示,我没有这样定义它。我只是把dd输出的剪报拿出来在这里展示。实际上,我已经在我的真实脚本中定义了它,就像您所展示的那样。您必须按照这里的方式发布代码以避免混淆。我已经更新了我的代码片段(散列声明),但它清楚地提到了“Perl6”。Raju,感谢您的循环。我已经知道通过循环计数,但我正在寻找等效的perl6语法。如果您在问题中告诉我们这一点,那将非常有帮助。我个人倾向于在我必须维护的其他人的代码中看到%hash.elems。+%很容易被忽略,最终可能会造成一些混乱。@MattOates:是的,可能。我们人类善于错过而不是不错过。。heheIn Perl 5中,如果将哈希强制为标量,则会得到bucket。