Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/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中的concat列_Perl_Merge_Concat - Fatal编程技术网

perl中的concat列

perl中的concat列,perl,merge,concat,Perl,Merge,Concat,我的perl代码中的每次迭代都会生成一个5的向量。 第一次迭代的输出是 out1 1 2 3 4 5 第二次迭代生成相同长度的向量 out2 10 20 30 40 50 然后它运行了第n次 out n 100 200 300 400 500 我希望合并这些列,并以表格格式或矩阵格式获得最终输出,如果您愿意: out1 out2 ... outn 1 10 100 2 20 200 3 30 300 4 40 400

我的perl代码中的每次迭代都会生成一个5的向量。 第一次迭代的输出是

out1
1
2
3
4
5
第二次迭代生成相同长度的向量

out2
10
20
30
40
50
然后它运行了第n次

out n
100
200
300
400
500
我希望合并这些列,并以表格格式或矩阵格式获得最终输出,如果您愿意:

out1 out2 ... outn
1    10       100
2    20       200
3    30       300
4    40       400
5    50       500
我尝试过拆分,然后使用推送,但它会打印“(101)”,并且只打印一次,而不是全部打印20。我也不知道“(101)”是从哪里来的


有什么建议吗?

首先,将所有这些输出列表放到一个列表中。其次,在该列表上迭代:在第一次迭代中输出每个元素列表的第一个元素,在第二次迭代中输出每个元素列表的第二个元素,依此类推

比如说

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my @lists;

for my $i (1..10) {
    my @list;
    push @list, $_ * $i for (1..5);

    push @lists, \@list;
}

$Data::Dumper::Indent = 0;
print Dumper(\@lists), "\n\n";

while (@{$lists[0]}) {
    for my $list (@lists) {
        print shift @$list, "\t";
    }
    print "\n";
}

输出:

$ perl t.pl 
$VAR1 = [
  [1,2,3,4,5],
  [2,4,6,8,10],
  [3,6,9,12,15],
  [4,8,12,16,20],
  [5,10,15,20,25],
  [6,12,18,24,30],
  [7,14,21,28,35],
  [8,16,24,32,40],
  [9,18,27,36,45],
  [10,20,30,40,50]
];

1   2   3   4   5   6   7   8   9   10  
2   4   6   8   10  12  14  16  18  20  
3   6   9   12  15  18  21  24  27  30  
4   8   12  16  20  24  28  32  36  40  
5   10  15  20  25  30  35  40  45  50


注意:
Data::Dumper
的输出已经过编辑,使其更加紧凑。

在处理过程中将向量信息保存到数组中。然后,您可以使用简单的联接输出行:

use strict;
use warnings;

my @rows;

for my $i (1..10) {
    my @vector = map {$i * $_} (1..5);

    push @{$rows[$_]}, $vector[$_] for (0..$#vector);
}

for my $row (@rows) {
    print join(" ", map {sprintf "%-3s", $_} @$row), "\n";
}
产出:

1   2   3   4   5   6   7   8   9   10
2   4   6   8   10  12  14  16  18  20
3   6   9   12  15  18  21  24  27  30
4   8   12  16  20  24  28  32  36  40
5   10  15  20  25  30  35  40  45  50

注意:如果您提供了代码和实际数据,则建议会容易得多。

请参阅编辑的问题。请在问题中包含您的问题代码。显示代码,我们可以向您展示如何修复。否则,您需要说明向量是如何存储的,以及向量是如何输出的。