我有两个对应于以下文件的数组散列(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(A-D)中的每个$键,我想调用一个子程序,对其相应的数组和第一个HoA(A-B)中每个 $键的数组进行计算。根据计算,子程序应从第一个HoA返回一个产生最高值的密钥。换句话说,只应为第二个HoA中的每个$ key调用子例程,并在第一个HoA中返回$ 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++;
}
}
如您所见,此调用calculate
8次。我只想为calculate
中的每个$ key调用%second_HoA
,这是4次,但我还需要传递$arrayref
以在子例程中进行计算。
有谁知道我该怎么做?
我想要这样做的另一种方法是传递first_HoA的hash_ref,如下所示:
foreach my $key ( keys %second_HoA ) {
calculate($second_HoA{$key}, \%first_HoA);
print "Iteration: $iterations\n";
$iterations++;
}
执行此操作会调用calculate
4次,这是我想要的,但它使子程序中的内容变得复杂。
任何建议。感谢。
答案 0 :(得分:1)
你说calculate($second_HoA{$key}, \%first_HoA)
“使事情变得复杂”,但我不知道这是怎么回事。在我看来,这是您需要的最少信息,而且它是一种方便的格式。
任何不足都会使事情变得复杂,因为你没有掌握计算所需的信息。