我有一个哈希数组,所有的键都相同,例如:
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])
也许我可以写一个循环,逐级添加一个级别,从哈希表中删除该键,然后将剩余的哈希表添加到“当前”位置,但这有点麻烦,而且我不确定如何在哈希表的哈希中保留“位置”...
$expected{FEMALE}{Swedish}
应该包含什么?按照你展示的方式(一直使用哈希),这个问题没有一个好的答案。我的假设是$expected{FEMALE}{Swedish}
需要是一个数组引用,其中包含修剪后的哈希引用。 - FMc