Perl什么时候"哈希"哈希?

tex*_*uce 0 perl hash

根据perl doc页面:

perldata

散列是由其关联的字符串键索引的标量值的无序集合.

我会认为perl哈希是有序的,因为它们通常使用数组构造:

my %h = ("a",1,"b", 2);
Run Code Online (Sandbox Code Playgroud)

如果Perl哈希值是无序的,则需要对它们进行"哈希"处理以允许访问.问题是Perl何时哈希哈希?

如果我们这样做:

my %h = ("1",1); #1
print $h{"1"};     #2
Run Code Online (Sandbox Code Playgroud)

我假设这行#1在内部进行散列.

如果从数组构造哈希:

#@a = ("1", 1);
my %h = @a;
Run Code Online (Sandbox Code Playgroud)

我假设%h的任务正在进行散列.

请确认我的假设是否正确,我似乎没有在互联网上的任何地方找到详细信息.

hob*_*bbs 7

只要将字符串用作散列键,就会计算该字符串的散列值.如果键是常量(例如"a"in $hash{"a"}),那么它的散列在编译时计算并存储在optree中; 否则根据需要在运行时计算.这适用于分配和检索; 散列键用于查找正确的散列元素,以将值存储到或从中检索值.

  • @texasbruce它是一个哈希表,因此哈希.而这个名字.具体来说,它是一个带有链表列表的单哈希表,如果任何桶太大,表增长.我怀疑这里有一个答案可以更详细地解释结构,但我现在不能轻易找到它,因为我正在打电话. (2认同)