【问题标题】:concat columns in perlperl 中的 concat 列
【发布时间】:2014-05-24 12:38:28
【问题描述】:

我的 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”来自哪里。

有什么建议吗?

【问题讨论】:

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

标签: perl merge concat


【解决方案1】:

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

例如

#!/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 的输出已被编辑以使其更紧凑。

【讨论】:

    【解决方案2】:

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

    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
    

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

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2012-05-15
      • 2021-06-12
      • 2020-03-26
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      相关资源
      最近更新 更多