Вызов подпрограммы N количество раз в цикле foreach
У меня есть два хэша массивов (HoA), которые соответствуют следующему файлу:
A 10 15 20 25
B 21 33 21 23
C 43 14 23 23
D 37 45 43 49
Вот мои HoAs.
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'],
);
Для каждого $key во втором HoA (AD) я хочу вызвать подпрограмму, которая выполняет вычисления для соответствующего массива и массива каждого $key в первом HoA (AB). Основываясь на вычислениях, подпрограмма должна вернуть ключ от первого HoA, который дает наибольшее значение. Другими словами, подпрограмма должна вызываться только для каждого ключа $ во втором HoA и возвращать ключ $ в первом HoA, который дает наилучшее значение на основе вычислений массивов ключей в первом HoA.
Вот как у меня это сейчас. Скажем, у меня есть произвольная подпрограмма под названием 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
за каждый ключ $ %second_HoA
что в 4 раза, но мне также нужно пройти в $arrayref
делать расчеты в подпрограмме.
Кто-нибудь знает, как я могу это сделать?
Другим способом, которым я думал об этом, было передать hash_ref first_HoA следующим образом:
foreach my $key ( keys %second_HoA ) {
calculate($second_HoA{$key}, \%first_HoA);
print "Iteration: $iterations\n";
$iterations++;
}
Делать это звонки calculate
4 раза, что я хочу, но это усложняет ситуацию в подпрограмме.
Какие-либо предложения. Благодарю.
1 ответ
Ты говоришь calculate($second_HoA{$key}, \%first_HoA)
"усложняет вещи", но я не понимаю, как это возможно. Мне кажется, это минимум информации, который вам нужен, и в удобном формате.
Все, что меньше, усложнит ситуацию в том смысле, что у вас не будет информации, необходимой для расчетов.