2012-06-08 57 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

相關問題