将两个数组(逐列)合并到perl中的新复合数组中的方法是什么?
@ ARRAY1
car
scooter
truck
@数组2
four
two
six
我尝试使用以下内容:
my @merged = (@array1, @array2); print @merged;
但它将两个数组合并在一列中,如下所示:
car
scooter
truck
four
two
six
但我想要的是如下:
@merged[0] @merged[1]
car four
scooter two
truck six
答案 0 :(得分:6)
在Perl中,如果您正在列出列表中的数组,它将自动展平为列表。
my @array = (@ar1,@ar2);
如果你想存储为一个数组,你应该引用一个数组并将引用存储到另一个数组,如
my @array = (\@ar1,\@ar2);
现在@array
引用了@ar1
和@ar2
。
然后使用相应的数据类型取消引用引用
在你的情况下
print @{$array[0]};
最后,您可以将以下内容用于您的案例
use warnings;
use strict;
my @array1 = qw(car scooter truck);
my @array2 = qw(four five six);
my @merged = (\@array1,\@array2); #referencing the array1 and array2
foreach my $i (0..$#{$merged[0]})
{
# getting the last index value using $#{$merged[0]}
printf ("%-10s%-10s\n",$merged[0][$i],$merged[1][$i]);
}
答案 1 :(得分:1)
这将按要求执行:
my @merged;
for (my $i=0; $i<=$#array1; ++$i)
{
$merged[$i*2] = $array1[$i];
$merged[$i*2+1] = $array2[$i];
}
答案 2 :(得分:1)
my @merged;
for (0 .. $#array1) {
push(@merged, ([$array1[$_],$array2[$_]]));
}
或
my @merged;
push @merged, map {[$array1[$_], $array2[$_]]} 0 .. $#array1;
答案 3 :(得分:1)
但是我想要的如下:
@merged[0] @merged[1] car four scooter two truck six
我看到两种解释方式。
与mkHun一样,作为两个数组引用的列表:
my @array1 = qw(a b c);
my @array2 = qw(x y z);
my @merged = (\@array1, \@array2); # (['a', 'b', 'c'], ['x', 'y', 'z'])
此时您可以执行以下操作:
$merged[0]->[1] # 'b'
$merged[1]->[2] # 'z'
或作为交错元素的单个列表:
use List::MoreUtils qw(zip);
my @array1 = qw(a b c);
my @array2 = qw(x y z);
my @merged = zip @array1, @array2; # ('a', 'x', 'b', 'y', 'c', 'z')
此时您可以执行以下操作:
$merged[2] # 'b'
$merged[5] # 'z'
为此,请参见List::MoreUtils::zip
。
答案 4 :(得分:0)
根据样本数据判断,关联数组(哈希)可能是更合适的数据结构:
my %data;
@data{@array1} = @array2;
print $data{car}; # "four"
答案 5 :(得分:0)
尝试一下:
((1,2,3),(4,5,6))==(1,2,3,4,5,6)