私自身の教育のために、いくつかの配列を変換して、それぞれがハッシュのキーに関連付けられ、それらすべてのハッシュが配列になるようにするための巧妙な方法は何ですか?
少しわかりやすくするために、次のような配列があるとします。
my @n = ( 1, 2, 3 );
my @f = ( 3.14, 1.21, 0.75 );
my @s = ( 'a', 'b', 'c' );
そして、次のようなハッシュの配列が必要です。
my %h = ( number => 1, float => 3.14, string => 'a' );
単純な C スタイルの反復は明らかな解決策です。
for ( my $i = 0; $i < @n; $i++ ) {
my %h = ();
$h{number} = $n[$i];
$h{float} = $f[$i];
$h{string} = $s[$i];
push @a, \%h;
}
もう少しパーリッシュ:
for (0..$#n) {
push @c, { number => $n[$_], float => $f[$_], string => $s[$_] };
}
または、簡潔になり、配列の破棄を気にしない場合:
for (0..$#n) {
push @a, { number => shift @n, float => shift @f, string => shift @s };
}
そしてList::MoreUtils
:
use List::MoreUtils qw (each_array);
my $it = each_array @n, @f, @s;
while ( my ($n, $f, $s) = $it->() ) {
push @a, { number => $n, float => $f, string => $s };
}
TMTOWTDI の精神に則り、他にどのような解決策が欠けているのでしょうか?