【发布时间】:2015-07-23 12:00:24
【问题描述】:
根据 perl 文档页面:
哈希是标量值的无序集合,由其关联的字符串键索引。
我会认为 perl 哈希是有序的,因为它们通常是使用数组构造的:
my %h = ("a",1,"b", 2);
如果 Perl 哈希是无序的,则需要对其进行“哈希”处理以允许访问。问题是 Perl 什么时候对哈希值进行哈希处理?
如果我们这样做:
my %h = ("1",1); #1
print $h{"1"}; #2
我假设这条线 #1 正在内部进行散列。
如果哈希是从数组构造的:
#@a = ("1", 1);
my %h = @a;
我假设对 %h 的分配正在做散列。
请确认我的假设是否正确,我似乎在互联网上的任何地方都找不到详细信息。
【问题讨论】:
-
这可能会有所帮助:perl.com/pub/2002/10/01/hashes.html
-
("a",1,"b", 2)实际上是一个列表,而不是一个数组:stackoverflow.com/questions/6023821/perl-array-vs-list -
主要关注什么是?您的问题是关于语言实现的深奥问题,似乎与使用 Perl 的任何实际问题无关。
-
@dan1111 想要准确了解解释器在程序的特定步骤中做了多少工作并非完全不切实际。
-
关于一般问题:当我们说散列是无序时,我们并不是说您不能将一些有序数据放入散列中。我们的意思是,当您从哈希中检索条目时,您不能期望得到原始订单(或任何合理的订单)。在
%h1=(a=>1,b=>2);%h2=(b=>2,a=>1);之后,无法区分哈希值。 (注意:这并不意味着如果您执行keys %h1和keys %h2,这并不意味着它们保证以相同的顺序生成密钥 - 这意味着它们可能相同或可能不是。根本没有任何保证。)