Perl foreach语句是按顺序迭代还是按随机顺序迭代?
我想知道Perl中的foreach语句是否以一致的顺序迭代数组中的项?也就是说,如果在同一数组或列表上多次使用foreach,是否会得到不同的结果?如果不在两次之间更改列表,则列表的顺序将保持一致。是的,Perl foreach语句是按顺序迭代还是按随机顺序迭代?,perl,foreach,iteration,Perl,Foreach,Iteration,我想知道Perl中的foreach语句是否以一致的顺序迭代数组中的项?也就是说,如果在同一数组或列表上多次使用foreach,是否会得到不同的结果?如果不在两次之间更改列表,则列表的顺序将保持一致。是的,foreach语句中的项按顺序迭代 您的问题可能源于对散列元素进行迭代时产生的混乱: my %hash = ('a' => 1, 'b' => 2, 'c' => 3); foreach my $key (keys %hash) { print $key } ; # ou
foreach
语句中的项按顺序迭代
您的问题可能源于对散列元素进行迭代时产生的混乱:
my %hash = ('a' => 1, 'b' => 2, 'c' => 3);
foreach my $key (keys %hash) { print $key } ; # output is "cab"
但看似随机的顺序是Perl哈希表中数据存储方式的产物(Perl哈希表中的数据没有顺序)。“改变”哈希表顺序的是
keys
语句,而不是foreach
Perl的foreach循环哈希顺序看起来是随机的原因在于perlsec文档中链接的只是为了学究,keys
不会更改哈希表的顺序-如果在同一哈希表上重复调用keys
,而不插入或删除任何键,则每次都会以相同的顺序返回键。首先,通过将数据存储在散列中的行为改变了顺序。散列以确定但不可预测的顺序存储数据(在大多数实际情况下,使数据实际上处于无序状态)。只需添加一个相关问题的链接: