/ / Unir elementos de dos matrices y crear una matriz de resultados en perl: matrices, perl

Unir elementos de dos matrices y crear una matriz de resultados en perl - matrices, perl

Básicamente lo que necesito si tengo dos matrices como las siguientes:

my @a=("a","b","c");
my @z=("x","y","z");

Quiero que la matriz de resultados sea:

("a x","b y","c z")

La condición previa es que el número de elementos en la matriz es siempre el mismo. la condición posterior es que el orden debe ser el mismo que el orden de la matriz original. He escrito un bucle simple

my $i;
for($i=0;$i<scalar(@a);$i++)
{
push(@result,$a[$i]." ".$z[$i]);
}

Y lo anterior funciona. ¿Pero hay alguna forma mejor de hacer esto?

Respuestas

6 para la respuesta № 1

Puedes usar map, que es un bucle disfrazado:

my @result = map "$a[$_] $z[$_]", 0 .. $#a;

3 para la respuesta № 2

Inspirado por una respuesta a esta pregunta. Puedes usar each_array de List::MoreUtils para que sea un poco más limpio iterar sobre dos matrices a la vez.

#!/usr/bin/perl
use warnings;
use strict;

use List::MoreUtils qw/each_array/;

my @a = qw/a b c/;
my @b = qw/x y z/;
my $it = each_array(@a, @b);

my @result;

while (my ($x, $y) = $it->()) {
push @result, $x . " " . $y;
}