请考虑以下代码段:
use strict;
use warnings;
my %a = ( a => 1,
b => 2,
c => 'cucu',
d => undef,
r => 1,
br => 2,
cr => 'cucu',
dr => '321312321',
);
my $c = %a;
print $c;
Run Code Online (Sandbox Code Playgroud)
结果是5/8,我不明白这代表什么.我在某个地方读到这个分数查看结果中的数字可能代表哈希中的桶数,但显然不是这种情况.
有谁知道如何在标量上下文中评估perl哈希值?
编辑
我添加了一些其他哈希打印:
use strict;
use warnings;
use 5.010;
my %a = ( a => 1,
b => 2,
c => 'cucu',
d => undef,
r => 1,
br => 2,
cr => 'cucu',
dr => '321312321',
);
my $c = %a;
say $c; # 5/8
%a = ( a => 1,
b => 21,
c => 'cucu',
br => 2,
cr => 'cucu',
dr => '321312321',
);
$c = %a;
say $c; # 4/8
%a = ( a => 1,
b => 2,
c => 'cucu',
d => undef,
r => 1,
br => 2,
cr => 'cucu',
dr => '321312321',
drr => '32131232122',
);
$c = %a;
say $c; #6/8
Run Code Online (Sandbox Code Playgroud)
那么,你a => 1在哈希中称为"元组"就像一个桶?在这种情况下,为什么最后一个哈希仍然有8作为分母,当它有9'元组'?
谢谢大家直到现在的回复:)
ike*_*ami 23
哈希是链表的数组.散列函数将密钥转换为一个数字,该数字用作存储值的数组元素("bucket")的索引.链表处理多个键散列到同一索引("碰撞")的情况.
分数的分母是桶的总数.
分数的分子是具有一个或多个元素的桶的数量.
对于具有相同元素数量的哈希值,数字越大越好.返回6/8的碰撞比返回4/8的碰撞少.
小智 8
如果在标量上下文中计算哈希值,则在哈希值为空时返回false.如果有任何键/值对,则返回true; 更准确地说,返回的值是一个字符串,由使用的桶数和分配的桶数组成,用斜杠分隔.
你的情况,你有五个值(1,2,''cucu',undef,和'321312321'已经由八个键(映射)a,b,c,d,r,br,cr,和dr).
| 归档时间: |
|
| 查看次数: |
10254 次 |
| 最近记录: |