1

我有一个问题,希望有人能帮忙。

使用以下...

 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

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

4

2 回答 2

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);
}
于 2013-04-03T14:14:36.177 回答
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 ];
}
于 2013-04-03T14:09:25.620 回答