3

如果我有两个如下数组,基本上我需要什么:

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

我希望结果数组是:

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

前提条件是两个数组中的元素的数量总是相同的。post条件是顺序应该与原始数组顺序相同。我写了一个简单的循环

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_arrayfromList::MoreUtils使一次迭代两个数组更简洁。

#!/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 回答