我在Perl中有三个数组:
my @col1 = ('A', 'B', 'C', 'D');
my @col2 = ('2', '4', '6', '8');
my @col3 = ('Abc', 'Ghy', 'Tgh', 'Yth');
如何将这三个数组组合在一起,使结果看起来像
col1 | col2 | col3
A 2 Abc
b4 gy
C 6 Tgh
D 8 Yth
更新
我希望它是清楚的如何生成一个二维数组给定相同的函数。这里只是以防万一
use strict;
use warnings;
use List::MoreUtils qw/ each_array /;
my @col1 = qw/ A B C D /;
my @col2 = qw/ 2 4 6 8 /;
my @col3 = qw/ Abc Ghy Tgh Yth /;
my $iter = each_array @col1, @col2, @col3;
my @result;
while ( my @row = $iter->() ) {
push @result, @row;
}
use Data::Dump;
dd @result;
输出[
["A", 2, "Abc"],
["B", 4, "Ghy"],
["C", 6, "Tgh"],
["D", 8, "Yth"],
]
或者如果你不想使用非核心模块,那么这将按照你的要求做
use strict;
use warnings;
use List::Util qw/ max /;
my @col1 = qw/ A B C D /;
my @col2 = qw/ 2 4 6 8 /;
my @col3 = qw/ Abc Ghy Tgh Yth /;
my @cols = (@col1, @col2, @col3);
my @result;
for my $i ( 0 .. max map $#$_, @cols ) {
push @result, [ map $_->[$i], @cols ];
}
结果@result
是相同的
原始文章
我建议你使用List::MoreUtils
中的each_array
函数。给定数组列表,它返回一个迭代器函数,每次调用
下面是一些使用你自己的数据的示例代码
use strict;
use warnings;
use List::MoreUtils qw/ each_array /;
my @col1 = qw/ A B C D /;
my @col2 = qw/ 2 4 6 8 /;
my @col3 = qw/ Abc Ghy Tgh Yth /;
my $iter = each_array @col1, @col2, @col3;
while ( my @row = $iter->() ) {
print "@rown";
}
输出A 2 Abc
B 4 Ghy
C 6 Tgh
D 8 Yth
一种就是把它们粘在一起:
my @combined = ( @col1, @col2, @col3);
因为你的输出只是一个显示它的问题。
然而另外:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my @col1 = ( 'A', 'B', 'C', 'D' );
my @col2 = ( '2', '4', '6', '8' );
my @col3 = ( 'Abc', 'Ghy', 'Tgh', 'Yth' );
my @combined;
while ( @col1 or @col2 or @col3 ) {
push( @combined, [ map { shift ( @$_ ) // '' } (@col1, @col2, @col3 ) ] );
}
print Dumper @combined;
将旋转你的数组,这样你可以:
print join ( "|", @$_ ),"n" for @combined;