Оператор foreach выполняет итерацию по порядку или это может быть случайный порядок? - PullRequest
5 голосов
/ 01 мая 2010

Мне было интересно, выполняет ли оператор foreach в Perl элементы массива в согласованном порядке? То есть я получу разные результаты, если я буду использовать foreach несколько раз в одном массиве или списке?

Ответы [ 3 ]

9 голосов
/ 01 мая 2010

Да, элементы в операторе foreach повторяются по порядку.

Ваш вопрос может возникнуть из-за путаницы по поводу перебора элементов хеша:

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

Но, казалось бы, случайный порядок - это артефакт того, как данные хранятся в хеш-таблице Perl (данные в хеш-таблице Perl не упорядочены). Это оператор keys, который «меняет» порядок хеш-таблицы, а не foreach.

1 голос
/ 01 мая 2010

Если вы не измените список в промежутке времени, он будет в согласованном порядке.

0 голосов
/ 01 мая 2010

Причина, по которой порядок хэша цикла Perl в Perl выглядит на первый взгляд случайным, содержится в документе perlsec, связанном здесь

...