ハッシュの配列があり、すべて同じキーのセットがあります。例:
my $aoa= [
{NAME=>'Dave', AGE=>12, SEX=>'M', ID=>123456, NATIONALITY=>'Swedish'},
{NAME=>'Susan', AGE=>36, SEX=>'F', ID=>543210, NATIONALITY=>'Swedish'},
{NAME=>'Bart', AGE=>120, SEX=>'M', ID=>987654, NATIONALITY=>'British'},
]
指定されたキー階層を使用して、これをハッシュのハッシュに変換するサブルーチンを作成したいと思います。
my $key_hierarchy_a = ['SEX', 'NATIONALITY'];
aoh_to_hoh ($aoa, $key_hierarchy_a) = @_;
...
}
戻ります
{M=>
{Swedish=>{{NAME=>'Dave', AGE=>12, ID=>123456}},
British=>{{NAME=>'Bart', AGE=>120, ID=>987654}}},
F=>
{Swedish=>{{NAME=>'Susan', AGE=>36, ID=>543210}}
}
これにより、正しいキー階層が作成されるだけでなく、冗長になったキーも削除されることに注意してください。
正しい階層位置に新しい最も内側のハッシュを作成する必要がある時点で行き詰まっています。
問題は、「深さ」(つまり、キーの数)がわからないことです。私が定数を持っている場合、私は次のようなことをすることができます:
%h{$inner_hash{$PRIMARY_KEY}}{$inner_hash{$SECONDARY_KEY}}{...} = filter_copy($inner_hash,[$PRIMARY_KEY,$SECONDARY_KEY])
したがって、残りのハッシュを「現在の」場所に追加するよりも、一度に1つのレベルを追加し、ハッシュからそのキーを削除するループを作成できるかもしれませんが、少し面倒であり、維持する方法もわかりません。ハッシュのハッシュ内の「場所」..