我有一个问题,我希望有人可以提供帮助。
使用以下内容......
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
这样做的最佳方法是什么? 非常感谢您对此的帮助,非常感谢
答案 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 ];
}