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
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]);
}
my @merged;
for (0 .. $#array1) {
Push(@merged, ($array1[$_],$array2[$_]));
}
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.
Cela fera comme demandé:
my @merged;
for (my $i=0; $i<=$#array1; ++$i)
{
$merged[$i*2] = $array1[$i];
$merged[$i*2+1] = $array2[$i];
}
À 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"