2010-04-30 125 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