【发布时间】:2013-03-23 22:57:56
【问题描述】:
我有两个对应于以下文件的数组哈希 (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) 中的每个 $key,我想调用一个子例程,对其对应的数组和第一个 HoA (A-B) 中的 every $key 数组进行计算。根据计算,子例程应该从产生最高值的第一个 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 次,这是我想要的,但它会使子例程中的事情复杂化。
任何建议。谢谢。
【问题讨论】:
-
请贴子程序代码
-
子程序很长而且很复杂,但我会尝试发布它的最小表示。
-
好的,我刚刚发布了子程序
-
这 4 个电话应该是什么?填空:
calculate([ '10', '15', '20', '25'], ???),calculate([ '21', '33', '21', '23'], ???), ... -
我现在采用第二种方法。这些电话是
calculate(['10', '15', '20', '25'], \%first_HoA)、calculate([ '21', '33', '21', '23'], \%first_HoA)、calculate([ '43', '14', '23', '23'], \%first_HoA)和calculate([ '37', '45', '43', '49'], \%first_HoA)
标签: perl hash for-loop reference subroutine