2010-04-30 11 views

Respuesta

9

Sí, los elementos en una declaración foreach se repiten en orden.

Su pregunta podría surgir de la confusión sobre iterar sobre los elementos de un hash:

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

Pero el orden aparentemente aleatorio es un artefacto de cómo los datos se almacenan en una tabla hash de Perl (datos en un hash de Perl la tabla no está ordenada). Es la declaración keys que está "cambiando" el orden de la tabla hash, no el foreach.

+1

Sólo para ser pedante, 'keys' no cambia el orden de la tabla hash - si llama teclas' 'repetidamente en el mismo hash sin insertar o eliminar ninguna tecla, devolverá las claves en el mismo orden cada vez. El orden se cambia por el hecho de almacenar los datos en un hash en primer lugar. Los hash almacenan los datos en un orden que es determinista, pero impredecible (por lo que es efectivamente desordenado para la mayoría de los propósitos prácticos). –

+1

Simplemente agregando un enlace a una pregunta relacionada: [¿Perl garantiza devolver las claves hash ordenadas consistentemente? - Desbordamiento de pila] (http://stackoverflow.com/questions/1256502/is-perl-guaranteed-to-return-consistently-ordered-hash-keys) – sdaau

1

Si no cambia la lista de vez en cuando, siempre estará en un orden constante.

0

El razonamiento de por qué bucle foreach hash de ordenación de Perl es aparentemente al azar se encuentra en el documento perlsec, vinculados here

Cuestiones relacionadas