我的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”来自哪里。
有什么建议吗?
答案 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
注意:如果您提供代码和实际数据,建议会更容易。