如何从List :: MoreUtils中执行zip / mesh的反转?

时间:2015-02-11 23:12:54

标签: perl

我有两个数组:

@foo = (1, 2, 3, 4);
@bar = ('A', 'B', 'C', 'D');

如果我使用List::MoreUtils中的mesh / zip压缩它们,我就会知道:

@zipped = (1, 'A', 2, 'B', 3, 'C', 4, 'D');

如何向后执行此操作,即从@zipped开始如何获得@foo@bar

1 个答案:

答案 0 :(得分:8)

一览::的Util ::对

use List::Util 'pairs';
my @zipped = ('1', 'A', '2', 'B', '3', 'C');
my ($foo, $bar) = pairs @zipped;

$foo$bar将分别引用包含('1'..'3')('A'..'C')的数组。

或者如果有两个以上的数组,请使用List :: MoreUtils :: part:

use List::MoreUtils 'part';
my @zipped = ('1', 'A', 'a', '2', 'B', 'b', '3', 'C', 'c');
my $number_of_arrays = 3;

my $i = 0;
my @arrayrefs = part { $i++ % $number_of_arrays } @zipped;