3

基本的に、以下のような2つの配列がある場合に必要なもの:

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

結果配列を次のようにしたい:

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

前提条件は、両方の配列の要素が常に同じであることです。事後条件は、順序が元の配列順序と同じであることです。私は簡単なループを書いた

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

そして、上記の作品。しかし、これを行うより良い方法はありますか?

4

2 に答える 2

6

map変装したループである を使用できます。

my @result = map "$a[$_] $z[$_]", 0 .. $#a;
于 2013-04-04T09:33:35.173 に答える
3

この質問への回答に触発されました。each_arrayfromを使用しList::MoreUtilsて、一度に 2 つの配列を反復処理するのを少しきれいにすることができます。

#!/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;
}
于 2013-04-04T09:45:49.523 に答える