在Perl中,哈希键的顺序没有太大的保证。但是文档中有没有提到只要两个哈希使用完全相同的键,它们就会按照完全相同的顺序排列呢?
短暂的测试似乎证实了这一点。即使我在为两个不同的哈希分配之间生成一些额外的键用于内部键表,它们的键也以相同的顺序返回:
my %aaa;
my %bbb;
my %ccc;
my %ddd;
@aaa{qw(a b c d e f g h i j k l)}=();
# Let's see if generating more keys for internal table matters
@ccc{qw(m n o p q r s t u v w x)}=();
@bbb{qw(a b c d e f g h i j k l)}=();
# Just to test if different insertion order matters
@ddd{qw(l k c d e f g h i j a)}=(); $ddd{b} = ();
print keys %aaa, "\n";
print keys %bbb, "\n";
print keys %ddd, "\n";
然而,我不会依赖于未经记录的行为。文档中容易找到的事实是,只要哈希表没有被修改,keys
、values
和each
都将使用相同的顺序。
@ddd{qw(l k c d e f g h i j a)}=(); $ddd{b} = ();
但在print
中仍然显示相同的顺序。 - Oleg V. Volkovperldoc -f keys
中还有另一段话:“但是它保证的顺序要么与值相同,要么与每个函数生成的顺序相同。”可以看出,我们至少有一个保证,我正在寻找是否还有其他需要的保证。 - Oleg V. Volkov