foreach循环
内调用子程序N次我有两个散列对应于下列文件阵列(HOA)的:foreach循环
A 10 15 20 25
B 21 33 21 23
C 43 14 23 23
D 37 45 43 49
这里是我的高阶像差。
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'],
);
对于第二家乡地址(A-d)每$关键,我想调用一个子程序,它不计算在它的相应的阵列和第一家乡地址(A-B)每 $键的阵列。根据计算结果,子程序应从第一个HoA中返回一个产生最高值的密钥。换句话说,只应该为第二个HoA中的每个$ key调用子例程,并根据第一个HoA中的密钥数组的计算结果返回第一个HoA中的$ key,从而产生最佳值。
下面是我现在的工作方式。说我有叫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倍。我只想为%second_HoA
中的每个$ key调用calculate
这是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倍这是我想要的,但它在子程序复杂的事情。
有任何建议。谢谢。
你说calculate($second_HoA{$key}, \%first_HoA)
“使事情复杂化”,但我不明白这是可能的。在我看来,这是您需要的最少信息,而且格式便捷。
任何东西都会使事情变得复杂,因为你不需要做计算的信息。
是的,我会尝试这种方法。一旦我进入子程序,我可以参照哈希'%first_HoA',然后我可以遍历哈希值(数组的元素)并进行计算。 – cooldood3490
请发布子程序代码 – amphibient
该子程序很长并涉及,但我会尝试发布它的最小表示形式。 – cooldood3490
好吧我刚刚发布子程序 – cooldood3490