Exemples:
%hash = (2010 => 21, 2009=> 9); $hash = { a => { 0 => {test => 1}, 1 => {test => 2}, 2 => {test => 3}, 3 => {test => 4}, }, };
9 Réponses :
Utiliser les touches , valeurs code> fonction
Cela devrait aider: acclamations p> p>
Merci de réponse si mon hachage est comme ce $ Hash = {'A' => {0 => {'test' => '1'}, 1 => {'Test' => '2'}, 2 => {'test' => '3'}, 3 => {'test' => '4'}}}; Alors ce que je vais faire
printf ("%s = %s\n", $_, $hash {$_}) foreach (keys (%hash));
while( my( $key, $value ) = each( %hash ) ) { ... }
au lieu de vous devez écrire p> avec les bretelles frisées, vous obtenez une référence à un hachage anonyme,
qui est ensuite stocké comme première clé de vous% hachage. p> p>
et pire, il est stocké sous une forme stricte!
Oui, mais dans son deuxième B> Exemple The Op a écrit: $ h = {du contenu}; et que b> peut être légitime (disons à passer une référence de hachage à un sous). (Même si vous avez probablement raison et c'est une erreur de débute).
Voulez-vous imprimer la totalité des paires de hachage ou de la clé spécifique? Et quel est votre résultat souhaité? Si c'est juste à des fins de débogage, vous pouvez faire quelque chose comme: Vous pouvez utiliser la fonction ou le ou si vous ne voulez que certaines valeurs, vous pouvez utiliser une tranche de hachage, par exemple: p> etc, etc. Il y a toujours plus d'un moyen de le faire, etc. Bien que cela aide à savoir ce que vous faites frire de faire en premier :) p> p> chaque code> si vous ne vous souciez pas de la commande: p>
pour code> /
foreach code> Construit si vous souhaitez trier: p>
Je me trompe peut-être mais je crois que les problèmes de hachage OP avec la syntaxe permettent d'accéder à des articles ou même de hachage à l'aide de références de hachage, pas avec des itérateurs sur les hachages. Avis que dans son deuxième exemple, sa variable est un échec Scalar $ Hash, pas un hash.
@Kriss: La question initiale a demandé comment imprimer un hachage, il apparaîtrait que l'OP a modifié la question avec un autre exemple. Le premier exemple d'utilisation de données :: Dumper va toujours gérer cela correctement.
@Duncan: Data :: Dumper fonctionne partout. D'autre part, il y a plus que l'impression de données ;-)
@kriss: Il y a plus d'imprimer un hachage que d'impression de données? La question est "Comment imprimer une structure de hash à Perl?" :)
Syntaxe Pour accéder aux cellules internes pour votre deuxième exemple, c'est comme: qui vous donnera 1 dans votre exemple. p> Si vous voulez itérer sur elle, Vous pouvez le faire comme suit (les lignes d'impression sont à des fins d'illustration): p> Notez que les choses sont un peu plus difficiles que nécessaire car le hachage $ externe est une référence scalaire à un hachage anonyme. Ce serait plus simple s'il s'agissait d'un hachage (c'est-à-dire comme dans ( mon% hachage = (1, 2); impression $ HASH {1}; p>
chacun code> au lieu de
code> pour itérateur éviterait une recherche inutile de hachage). p> p>
La plupart des programmeurs n'écrivent pas de double sigil et des flèches répétées. Cette notation est beaucoup plus lisible: $ hash -> {'a'} {0} {'test'} code>
@DAXIM: Oui, j'ai essayé de le rendre plus explicite pour débutant mais j'ai probablement échoué sur celui-ci. Je vais le changer.
Récursion est probablement trop avancée à ce stade?
@Duncan: Probablement, mais je ne vois pas vraiment où vous voulez mettre de la récursie dans cette question? Quelques exemples sur la manière d'utiliser les hachages pour faire des arbres ou des graphiques?
Vous pouvez essayer avec cela,
while(my ($key,$val)=each %HASH){ print $key," = ",$val,"\n"; while(my ($kkey,$vval)=each %{$HASH{$key}}){ print " ",$kkey," = ",$vval,"\n"; } }
Est-ce que tu l'as essayé? Quel est le résultat de la première impression: impression $ clé, "=", $ val, "\ n"; code>
La fonction d'impression de fonction ci-dessous fonctionne à l'aide de la récursivité et peut imprimer des haubans de tableaux, des tableaux de hachage ou de tout mélange de ceux-ci à une profondeur. Vous l'appelez avec une référence à votre structure et un nom de la structure dans une chaîne. La dernière entrée $ pré-utilisée n'est utilisée que pendant la récursivité pour indiquer l'entrée initiale dans la fonction récursive. Il suffit de le laisser vide lorsque vous appelez la fonction.
----------------- %hash->{2009}=9 %hash->{2010}=21 ----------------- $hash->{a}->{0}->{test}=1 $hash->{a}->{1}->{test}=2 $hash->{a}->{2}->{test}=3 $hash->{a}->{3}->{test}=4 $hash->{b}->[0]=1 $hash->{b}->[1]=2 $hash->{b}->[2]=3 $hash->{b}->[3]=4 $hash->{b}->[4]=5 ----------------- @array->[0]->[0]=apple @array->[0]->[1]=banana @array->[0]->[2]=orange @array->[0]->[3]->{a}->{0}->{test}=1 @array->[0]->[3]->{a}->{1}->{test}=2 @array->[0]->[3]->{a}->{2}->{test}=3 @array->[0]->[3]->{a}->{3}->{test}=4 @array->[0]->[3]->{b}->[0]=1 @array->[0]->[3]->{b}->[1]=2 @array->[0]->[3]->{b}->[2]=3 @array->[0]->[3]->{b}->[3]=4 @array->[0]->[3]->{b}->[4]=5
Voir également cette question: Stackoverflow.com/questions/2363142/ How-to-ITÉTRÉ-TROS-H Ash
Voir les structures de données Perl Cookbook - Perldoc Perldsc sur la ligne de commande ou chez perdoc.perl.org/perldsc.html