配列 A の最初の要素と配列 B の最初の要素を取得して、同じ長さの 2 つの配列を 1 つの配列にマージしたいと考えています。A の 2 番目の要素、B の 2 番目の要素など。次のプログラムはアルゴリズムを示しています。
# file zipper.pl
use strict;
use warnings;
use 5.010;
my @keys = qw/abel baker charlie dog easy fox/;
my @values = qw/a b c d e f/;
# ==> Is there a builtin function that is equivalent of zipper()? <==
#
my %hash = zipper( \@keys, \@values );
while ( my ( $k, $v ) = each %hash ) {
say "$k=$v";
}
# zipper(): Take two equal-length arrays and merge them (one from A, one from B,
# another from A, another from B, etc.) into a single array.
#
sub zipper {
my $k_ref = shift;
my $v_ref = shift;
die "Arrays must be equal length" if @$k_ref != @$v_ref;
my $i = 0;
return map { $k_ref->[ $i++ ], $_ } @$v_ref;
}
出力
$ ./zipper.pl
easy=e
dog=d
fox=f
charlie=c
baker=b
abel=a
Zipper() に相当する Perl の組み込み関数を見落としていないかどうか疑問に思っています。これはプログラムの最も内側のループにあり、できるだけ速く実行する必要があります。組み込みモジュールまたは CPAN モジュールがない場合、誰かが私の実装を改善できますか?