2012-06-08 51 views
0

我很惊讶在PerlPerl是否以相反的顺序打印数组元素?

以下哈希阵列
#!/usr/bin/perl 

print "content-type: text/html \n\n"; 

# DEFINE A HASH 
%coins = ("Quarter" , 25, 
      "Dime" , 10, 
      "Nickel", 5); 

# LOOP THROUGH IT 
while (($key, $value) = each(%coins)){ 
    print $key.", ".$value."<br />"; 
} 

产生以下输出

Nickel, 5 
Dime, 10 
Quarter, 25 

我知道Perl有通过索引使用负数访问最后元素的能力,但在这里我们没有使用负数作为索引,为什么它会以相反的顺序打印哈希数组的内容?

回答

11

这不是一个数组,这是一个散列。这意味着事物内部存储为密钥的哈希值,而不是密钥的顺序。没有办法让他们回到他们添加的顺序。如果你想要他们在按键顺序,你需要

for my $key (sort keys %coins) 
{ 
    print $key, $coins{$key}; 
} 
+0

aa,据我了解,首先它打印此键具有最小值/。 –

+9

它打印他们没有保证或可辨别的顺序。你不能指望哈希中的任何顺序,这不是他们在那里。 –

+3

'each'的Perl文档说*哈希条目以明显随机的顺序返回。实际的随机顺序在未来版本的Perl中可能会发生变化。* – Borodin