Вызов подпрограммы 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) "усложняет вещи", но я не понимаю, как это возможно. Мне кажется, это минимум информации, который вам нужен, и в удобном формате.

Все, что меньше, усложнит ситуацию в том смысле, что у вас не будет информации, необходимой для расчетов.

Другие вопросы по тегам