Perl在序列中的递增点处插入

时间:2013-04-03 14:02:08

标签: perl loops increment

我有一个问题,我希望有人可以提供帮助。

使用以下内容......

 my @sequence = (1..9);
 my $newSequence = join " - ", @sequence;

...我可以打印连字符分隔的数字序列1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9

我遇到问题,并且不太了解解决的最佳逻辑方法,是在每次迭代时增加数字序列中变量字符串位置的循环(以产生下面显示的输出类型) )。

my $varString = "DOG"

我希望实现的输出:

DOG - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
1 - DOG - 3 - 4 - 5 - 6 - 7 - 8 - 9
1 - 2 - DOG - 4 - 5 - 6 - 7 - 8 - 9
1 - 2 - 3 - DOG - 5 - 6 - 7 - 8 - 9
1 - 2 - 3 - 4 - DOG - 6 - 7 - 8 - 9
1 - 2 - 3 - 4 - 5 - DOG - 7 - 8 - 9
1 - 2 - 3 - 4 - 5 - 6 - DOG - 8 - 9
1 - 2 - 3 - 4 - 5 - 6 - 7 - DOG - 9
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - DOG

这样做的最佳方法是什么? 非常感谢您对此的帮助,非常感谢

2 个答案:

答案 0 :(得分:7)

我错过了什么吗?当然这就是所需要的。

use strict;
use warnings;

my @sequence = 1 .. 9;

for my $i (0 .. $#sequence) {
  my @newseq = @sequence;
  $newseq[$i] = 'DOG';
  print join(' - ', @newseq), "\n";
}

<强>输出

DOG - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
1 - DOG - 3 - 4 - 5 - 6 - 7 - 8 - 9
1 - 2 - DOG - 4 - 5 - 6 - 7 - 8 - 9
1 - 2 - 3 - DOG - 5 - 6 - 7 - 8 - 9
1 - 2 - 3 - 4 - DOG - 6 - 7 - 8 - 9
1 - 2 - 3 - 4 - 5 - DOG - 7 - 8 - 9
1 - 2 - 3 - 4 - 5 - 6 - DOG - 8 - 9
1 - 2 - 3 - 4 - 5 - 6 - 7 - DOG - 9
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - DOG

<强>更新

对于那些专注于增加CPU空闲时间的人来说,这是另一种选择。我提供它是因为它比目前提出的任何解决方案都更清晰,更快。输出相同。

use strict;
use warnings;

my @sequence = 1 .. 9;

for my $i (0 .. $#sequence) {
  local $sequence[$i] = 'DOG';
  my $s = join(' - ', @sequence);
}

答案 1 :(得分:3)

使用数组切片的解决方案:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw(say);

my $size = 9;
my @sequence = 1 .. $size;
for my $pos (0 .. $size - 1) {
    say join ' - ', @sequence[ 0 .. $pos - 1 ],
                    'DOG',
                    @sequence[ $pos + 1 .. $size - 1 ];
}