次のファイルに対応する 2 つの配列のハッシュ (HoA) があります。
A 10 15 20 25
B 21 33 21 23
C 43 14 23 23
D 37 45 43 49
これが私の HoA です。
my %first_HoA = (
'A' => [ '10', '15', '20', '25'],
'B' => [ '21', '33', '21', '23'],
);
my %second_HoA = (
'A' => [ '10', '15', '20', '25'],
'B' => [ '21', '33', '21', '23'],
'C' => [ '43', '14', '23', '23'],
'D' => [ '37', '45', '43', '49'],
);
2 番目の HoA (AD) のすべての $key に対して、対応する配列と最初の HoA (AB)のすべての $key の配列を計算するサブルーチンを呼び出したいと思います。計算に基づいて、サブルーチンは、最も高い値を生成する最初の HoA からキーを返す必要があります。つまり、サブルーチンは 2 番目の HoA のすべての $key に対してのみ呼び出され、最初の HoA のキーの配列の計算に基づいて最適な値を生成する最初の HoA の $key を返す必要があります。
これが私が今持っている方法です。と呼ばれる任意のサブルーチンがあるとしますcalculate
my $iterations = 1;
foreach my $key ( keys %second_HoA ) {
for my $arrayref (values %first_HoA){
calculate($first_HoA{$key}, $arrayref);
print "Iteration: $iterations\n";
$iterations++;
}
}
ご覧のとおり、これはcalculate
8 回呼び出します。calculate
私は 4 回のすべての $keyを呼び出したいだけですが、サブルーチンで計算を行うため%second_HoA
にも渡す必要があります。$arrayref
誰も私がこれを行う方法を知っていますか?
私がこれを行うことを考えていた別の方法は、次のように first_HoA の hash_ref を渡すことでした。
foreach my $key ( keys %second_HoA ) {
calculate($second_HoA{$key}, \%first_HoA);
print "Iteration: $iterations\n";
$iterations++;
}
これを行うとcalculate
4 回呼び出されますが、これは私が望むことですが、サブルーチンの処理が複雑になります。
助言がありますか。ありがとう。