J'ai un tableau de hachages, tous avec le même jeu de clés, par exemple:Comment puis-je créer un hachage de hachages à partir d'un tableau de hachages en Perl?
my $aoa= [
{NAME=>'Dave', AGE=>12, SEX=>'M', ID=>123456, NATIONALITY=>'Swedish'},
{NAME=>'Susan', AGE=>36, SEX=>'F', ID=>, NATIONALITY=>'Swedish'},
{NAME=>'Bart', AGE=>120, SEX=>'M', ID=>987654, NATIONALITY=>'British'},
]
Je voudrais écrire un sous-programme qui convertir en un hachage de hachages en utilisant une hiérarchie clé donnée:
my $key_hierarchy_a = ['SEX', 'NATIONALITY'];
aoh_to_hoh ($aoa, $key_hierarchy_a) = @_;
...
}
retournera
{M=>
{Swedish=>{{NAME=>'Dave', AGE=>12, ID=>123456}},
British=>{{NAME=>'Bart', AGE=>120, ID=>987654}}},
F=>
{Swedish=>{{NAME=>'Susan', AGE=>36, ID=>}}
}
Notez cela crée non seulement la hiérarchie clé correcte mais également supprimer les clés maintenant redondantes.
Je suis coincé au point où j'ai besoin de créer le nouveau hachage le plus interne dans son emplacement hiérarchique correct.
Le problème est que je ne connais pas la "profondeur" (c'est-à-dire le nombre de touches). Si I a un nombre constant, que je pouvais faire quelque chose comme:
%h{$inner_hash{$PRIMARY_KEY}}{$inner_hash{$SECONDARY_KEY}}{...} = filter_copy($inner_hash,[$PRIMARY_KEY,$SECONDARY_KEY])
donc peut-être que je peux écrire une boucle qui ajoutera un niveau à la fois, retirez cette clé du hachage, que d'ajouter le hachage restant à la emplacement « en cours », mais il est un peu lourd et aussi je ne suis pas sûr de savoir comment garder un « lieu » dans un hachage de hachages ...
Vous vous attendiez à une structure de données incorrecte. Par exemple, s'il y avait deux femelles suédoises, que devrait contenir '$ expected {FEMALE} {Swedish}'? La façon dont vous l'avez montré (hachage tout le long), il n'y a pas une bonne réponse à cette question. Mon hypothèse est que '$ expected {FEMALE} {Swedish}' doit être une ** référence de tableau contenant les références de hachage élaguées. – FMc
@FM vous avez raison –
Ceci n'est pas * difficile * à faire, mais vous devez lister une structure plus définie. Peut-être décrivant en XML la hiérarchie et quels sont les attributs/éléments qui se produisent une fois, et qui peuvent être listés plusieurs fois. – vol7ron