web-dev-qa-db-fra.com

Fusionner des tableaux pour créer un nouveau tableau en perl

Quel est le moyen de fusionner deux tableaux (en colonnes) dans un nouveau tableau composite en perl? 

@ array1

car
scooter
truck

@ array2

four
two
six

J'ai essayé d'utiliser ce qui suit:

my @merged = (@array1, @array2); print @merged;

Mais il fusionne les deux tableaux dans une colonne comme suit:

car
scooter
truck
four
two
six

Mais ce que je veux, c'est ce qui suit:

@merged[0] @merged[1] 
car             four
scooter         two
truck           six
5
Vinay

En Perl, si vous tracez le ou les tableaux de la liste, la liste s’aplatira automatiquement.

my @array = (@ar1,@ar2);

Si vous voulez stocker en tant que tableau, vous devez faire référence à un tableau et stocker la référence dans un autre tableau comme

my @array = (\@ar1,\@ar2);

Maintenant, @array a la référence de @ar1 et @ar2.

Puis utilisez le type de données correspondant pour déréférencer la référence

Dans ton cas

print @{$array[0]}; 

Enfin, vous pouvez utiliser les éléments suivants pour votre cas

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


}
3
mkHun
my @merged;
for (0 .. $#array1) {
    Push(@merged, ($array1[$_],$array2[$_]));
}
1
Scott Pritchett

Mais ce que je veux, c'est ce qui suit:

@merged[0] @merged[1] 
car             four
scooter         two
truck           six

Je vois deux façons d'interpréter cela.

Soit, comme mkHun, une liste de deux références de tableau:

my @array1 = qw(a b c);
my @array2 = qw(x y z);
my @merged = (\@array1, \@array2); # (['a', 'b', 'c'], ['x', 'y', 'z'])

à quel point vous pouvez faire:

$merged[0]->[1] # 'b'
$merged[1]->[2] # 'z'

Ou comme une liste unique d'éléments entrelacés:

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')

à quel point vous pouvez faire:

$merged[2] # 'b'
$merged[5] # 'z'

Voir List::MoreUtils::Zip pour cela.

1
Simon Shine

Cela fera comme demandé:

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

À en juger par les données exemple, un tableau associatif (hachage) est probablement une structure de données plus appropriée:

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

print $data{car}; # "four"
0
Zaid