2010-04-30 1467 views

回答

9

是的,foreach語句中的項目按順序迭代。

你提的問題從混亂可能出現在迭代一個哈希的元素:

my %hash = ('a' => 1, 'b' => 2, 'c' => 3); 
foreach my $key (keys %hash) { print $key } ; # output is "cab" 

但在這看似隨機的順序是怎樣的數據都存儲在一個Perl哈希表(數據在一個Perl哈希神器表不是有序的)。這是keys聲明是「改變」散列表的順序,而不是foreach

+1

只要是迂腐,'keys'不改變哈希表的順序 - 如果你調用'鍵'不必插入或刪除任何密鑰就可以在同一個散列上重複,每次都會以相同的順序返回密鑰。首先將數據存儲在散列中的行爲正在改變順序。哈希將數據按確定性的順序存儲,但不可預知(爲了實際目的,使其無序)。 – 2010-05-01 10:40:16

+1

只需將鏈接添加到相關問題:[Perl是否保證返回一致排序的散列鍵? [Stack Overflow](http://stackoverflow.com/questions/1256502/is-perl-guaranteed-to-return-consistently-ordered-hash-keys) – sdaau 2012-10-31 09:21:33

1

如果您在兩次之間沒有更改列表,它將會保持一致的順序。

0

爲什麼Perl的foreach循環哈希排序是看似隨意的理由是perlsec文件,鏈接here