Если все, что вы хотите, чтобы пройти через элементы массива в повернутом порядке, вам не нужно возиться с push
, pop
, или splice
, даже если либо модифицировать массив на месте, либо создать новый - наиболее интуитивные подходы для большинства из нас.
Вы можете, однако, создать итератор, который будет проходить массив в повернутом порядке путем применения смещения и прикрепив ее с помощью размера массива:
#!/usr/bin/env perl
use strict;
use warnings;
my @x = ('a' .. 'z');
for my $d (3, 5, 43) {
my $it = rotated_it(\@x, $d);
print "@x[ map $it->($_), 1, 3, 5, 7, 11, 13 ]\n";
}
sub rotated_it {
my $k = @{ $_[0] };
my $c = $_[1] - 1;
sub { ($_[0] + $c) % $k };
}
Это может быть особенно полезно, если основной массив большой и все, что вам нужно несколько элементов из повернутого массива, или если вы хотите, чтобы иметь возможность пройти через массив один элемент в то время, без создания дополнительных массивов и т.д.
Выход:
d f h j n p
f h j l p r
r t v x b d
Спасибо! Работает отлично :) –