-1

次のファイルに対応する 2 つの配列のハッシュ (HoA) があります。

A   10  15  20  25
B   21  33  21  23
C   43  14  23  23
D   37  45  43  49

これが私の HoA です。

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'],
     );

2 番目の HoA (AD) のすべての $key に対して、対応する配列と最初の HoA (AB)のすべての $key の配列を計算するサブルーチンを呼び出したいと思います。計算に基づいて、サブルーチンは、最も高い値を生成する最初の HoA からキーを返す必要があります。つまり、サブルーチンは 2 番目の 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++;
    }
}

ご覧のとおり、これはcalculate8 回呼び出します。calculate私は 4 回のすべての $keyを呼び出したいだけですが、サブルーチンで計算を行うため%second_HoAにも渡す必要があります。$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 に答える