我有两个对应于以下文件的数组散列(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++;
}
}
如您所见,这调用了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 次,这是我想要的,但这会使子程序中的事情变得复杂。
有什么建议么。谢谢。