Perl 何时 "hash" 散列?
When does Perl "hash" the hashes?
根据 perl 文档页面:
哈希是标量值的无序集合,由其关联的字符串键索引。
我原以为 perl 哈希是 有序的 因为它们通常是使用数组构造的:
my %h = ("a",1,"b", 2);
如果 Perl 哈希是无序的,则需要对它们进行 "hash" 编辑才能允许访问。问题是 Perl 何时散列散列?
如果我们这样做:
my %h = ("1",1); #1
print $h{"1"}; #2
我假设第 1 行是在内部进行哈希处理。
如果散列是从数组构造的:
#@a = ("1", 1);
my %h = @a;
我假设对 %h 的赋值正在执行散列。
请确认我的假设是否正确,我似乎没有在互联网上的任何地方找到详细信息。
只要将字符串用作哈希键,就会计算该字符串的哈希值。如果键是一个常量(例如 "a"
in $hash{"a"}
),那么它的哈希值在编译时计算并存储在 optree 中;否则它会根据需要在运行时计算。这同样适用于赋值和检索;散列键用于查找正确的散列元素以将值存储到其中或从中检索值。
根据 perl 文档页面:
哈希是标量值的无序集合,由其关联的字符串键索引。
我原以为 perl 哈希是 有序的 因为它们通常是使用数组构造的:
my %h = ("a",1,"b", 2);
如果 Perl 哈希是无序的,则需要对它们进行 "hash" 编辑才能允许访问。问题是 Perl 何时散列散列?
如果我们这样做:
my %h = ("1",1); #1
print $h{"1"}; #2
我假设第 1 行是在内部进行哈希处理。
如果散列是从数组构造的:
#@a = ("1", 1);
my %h = @a;
我假设对 %h 的赋值正在执行散列。
请确认我的假设是否正确,我似乎没有在互联网上的任何地方找到详细信息。
只要将字符串用作哈希键,就会计算该字符串的哈希值。如果键是一个常量(例如 "a"
in $hash{"a"}
),那么它的哈希值在编译时计算并存储在 optree 中;否则它会根据需要在运行时计算。这同样适用于赋值和检索;散列键用于查找正确的散列元素以将值存储到其中或从中检索值。