-1

我有两个对应于以下文件的数组散列(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'],
     );

对于第二个 HoA (AD) 中的每个 $key,我想调用一个子程序,对它的相应数组和第一个 HoA (AB) 中的每个$key 的数组进行计算。根据计算,子例程应该从产生最高值的第一个 HoA 返回一个键。换句话说,应该只为第二个 HoA 中的每个 $key 调用子例程,并返回第一个 HoA 中的 $key,该 $key 基于对第一个 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++;
    }
}

如您所见,这调用了calculate8 次。我只想调用calculate每个 $key %second_HoA4 次,但我还需要传入 以$arrayref在子例程中进行计算。

有谁知道我该怎么做?

我正在考虑这样做的另一种方法是传递 first_HoA 的 hash_ref ,如下所示:

foreach my $key ( keys %second_HoA ) {
    calculate($second_HoA{$key}, \%first_HoA);
    print "Iteration: $iterations\n";
    $iterations++;
}

这样做会调用calculate4 次,这是我想要的,但这会使子程序中的事情变得复杂。

有什么建议么。谢谢。

4

1 回答 1

1

你说calculate($second_HoA{$key}, \%first_HoA)“使事情复杂化”,但我不明白这怎么可能。在我看来,这是您需要的最少信息,而且格式方便。

任何更少的事情都会使事情复杂化,因为您将无法获得进行计算所需的信息。

于 2013-03-24T00:03:40.220 回答