perl中的concat列

时间:2014-05-24 12:38:29

标签: 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
5    50       500

我尝试拆分然后使用推送但是它打印“(101”并且只执行一次而不是所有20.我也不知道“(101”来自哪里。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

例如

#!/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的输出已经过编辑,使其更加紧凑。

答案 1 :(得分:0)

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

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

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