Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl在序列中递增的点插入_Perl_Loops_Increment - Fatal编程技术网

Perl在序列中递增的点插入

Perl在序列中递增的点插入,perl,loops,increment,Perl,Loops,Increment,我有个问题,我希望有人能帮我解决 使用以下命令 my @sequence = (1..9); my $newSequence = join " - ", @sequence; …我可以打印以连字符分隔的数字序列1-2-3-4-5-6-7-8-9 我遇到的问题是,在每次迭代中,循环递增变量字符串在数字序列中的位置(以产生如下所示的输出),但我不太知道解决这个问题的最佳逻辑方法 我希望实现的输出: DOG - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 1 - DOG - 3

我有个问题,我希望有人能帮我解决

使用以下命令

 my @sequence = (1..9);
 my $newSequence = join " - ", @sequence;
…我可以打印以连字符分隔的数字序列
1-2-3-4-5-6-7-8-9

我遇到的问题是,在每次迭代中,循环递增变量字符串在数字序列中的位置(以产生如下所示的输出),但我不太知道解决这个问题的最佳逻辑方法

我希望实现的输出:

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
这样做的最佳方式是什么?
非常感谢您的帮助,非常感谢使用阵列切片的解决方案:

#!/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 ];
}

使用阵列切片的解决方案:

#!/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 ];
}

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

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);
}

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

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);
}

在0+0处插入,然后在10+1处插入,然后在20+2处插入。。。换句话说,您将有两个计数器,一个以十为单位递增,另一个以一为单位递增。甚至是一个每次递增一的计数器,并在
$c*10+$c
处插入,例如,在0+0处插入,然后在10+1处插入,然后在20+2处插入。。。换句话说,您将有两个计数器,一个以十为单位递增,另一个以一为单位递增。甚至一个每次递增一的计数器,并在
$c*10+$c
处插入。您在那里无缘无故地复制了许多数组。@gbtimmon我向您挑战,希望您做得更好。上面的代码大致完成了O(n²)
SV
拷贝(数组拷贝)和
O(n²)
SV*
拷贝(
@newseq
元素作为堆栈上的
连接
的参数),以及一些不相关的线性因子。我无法访问chorobas解决方案,因为我不知道切片是如何实现的,但如果切片中的范围产生
SV
s,那么我们的复杂性肯定是相同的。@gbtimmon:它的工作方式是代码,(运行,优化,如果需要)*。不是优化,代码,run@Borodin*滚动眼睛*在复杂度较高且您试图将开发复杂度保持在最低水平时,开发大型流程和程序是有意义的。编写这样的未优化的简单函数只是懒惰。同样简单(但经过优化)的解决方案已经出现在本页上,并且很容易找到。如果不需要太多额外的脑力就可以开始优化,为什么不这样做呢?@gbtimmon:我很抱歉你的眼睛有问题,但我完全不同意。优化每件事所需的时间远远超过节省的时间,除非您处理的数据非常庞大。众所周知,在编程方面,懒惰是一种美德,高级语言本身就是这种懒惰的产物。如果你除了寻找最清晰的解决方案之外,你甚至不应该考虑使用Perl。你在那里毫无理由地复制了很多数组。上面的代码大致完成了O(n²)
SV
拷贝(数组拷贝)和
O(n²)
SV*
拷贝(
@newseq
元素作为堆栈上的
连接
的参数),以及一些不相关的线性因子。我无法访问chorobas解决方案,因为我不知道切片是如何实现的,但如果切片中的范围产生
SV
s,那么我们的复杂性肯定是相同的。@gbtimmon:它的工作方式是代码,(运行,优化,如果需要)*。不是优化,代码,run@Borodin*滚动眼睛*在复杂度较高且您试图将开发复杂度保持在最低水平时,开发大型流程和程序是有意义的。编写这样的未优化的简单函数只是懒惰。同样简单(但经过优化)的解决方案已经出现在本页上,并且很容易找到。如果不需要太多额外的脑力就可以开始优化,为什么不这样做呢?@gbtimmon:我很抱歉你的眼睛有问题,但我完全不同意。优化每件事所需的时间远远超过节省的时间,除非您处理的数据非常庞大。众所周知,在编程方面,懒惰是一种美德,高级语言本身就是这种懒惰的产物。如果你除了寻找最清晰的解决方案之外,你甚至不应该考虑使用Perl。