在perl中合并数组以生成新数组

n53p2ov0  于 2023-06-06  发布在  Perl
关注(0)|答案(6)|浏览(479)

在perl中,如何将两个数组(按列)合并为一个新的复合数组?
@array1

car
scooter
truck

@array2

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
wlzqhblo

wlzqhblo1#

在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]);

}
oaxa6hgo

oaxa6hgo2#

my @merged;
for (0 .. $#array1) {
    push(@merged, ([$array1[$_],$array2[$_]]));
}

my @merged;
push @merged, map {[$array1[$_], $array2[$_]]} 0 .. $#array1;
wtlkbnrh

wtlkbnrh3#

但我想要的是如下:

@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

zi8p0yeb

zi8p0yeb4#

这将按要求进行:

my @merged;
for (my $i=0; $i<=$#array1; ++$i)
{
    $merged[$i*2] = $array1[$i];
    $merged[$i*2+1] = $array2[$i];
}
nnsrf1az

nnsrf1az5#

试试这个:

((1, 2, 3), (4, 5, 6)) == (1, 2, 3, 4, 5, 6)
ohtdti5x

ohtdti5x6#

根据示例数据判断,关联数组(哈希)可能是更合适的数据结构:

my %data;
@data{@array1} = @array2;

print $data{car}; # "four"

相关问题