如何在perl中合并两个数组,交替每个数组的值

Vin*_*y D 16 arrays perl

假设我有2个如下所述的数组

@a1 = ("Vinay", Raj, harry);
@b1 = ("dude","rock");
Run Code Online (Sandbox Code Playgroud)

合并后我希望得到这样的结果

[
    Vinay
    dude
    Vinay
    rock
    Raj
    dude
    Raj
    rock
    harry
    dude
    harry
    rock
]
Run Code Online (Sandbox Code Playgroud)

基本上我想将array1的每个索引值合并到array2的所有索引值.

添加到上面的问题我有另一个问题.

对于上面的相同问题,如何在特定数组索引处合并2个数组.例如,我有160个元素的2个数组,现在我想在集合中的每个第5个元素合并数组,这可能吗?

jmd*_*din 53

只需创建一个新数组:

my @merged = (@a1, @b1);
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子:

my @a1 = ("foo", "bar");
my @a2 = ("baz", "spam");

my @merged = (@a1, @a2);

print $merged[3]; #=> "spam"
Run Code Online (Sandbox Code Playgroud)

编辑:我错过了订购要求.你只需要zip他们在一起,你可以做List::MoreUtils:

use List::MoreUtils qw(zip);
use Data::Dumper qw(Dumper);

my @a1 = ("Vinay", "Raj", "harry");
my @a2 = ("dude", "rock");

my @merged = zip(@a1, @a2);

print Dumper(\@merged);
Run Code Online (Sandbox Code Playgroud)


小智 10

这是一种方法.但是,它可能不是最好的perl语法.double for循环意味着您将把两个数组的每个组合推送到合并数组中.我试图设置它,以便结果按照您在问题中指定的顺序.

my @merged;

for my $a ( @a1 ) {
  for my $b ( @b1 ) {
    push( @merged, ($a, $b) );
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 一般来说,请尽量避免使用变量`$ a`和`$ b`,因为它们在内置[`sort`](http://p3rl.org/sort)中具有非常特殊的含义.但是答案很好.:) (3认同)