8
votes

Comment imprimer une structure de hachage à Perl?

Exemples:

%hash = (2010 => 21, 2009=> 9);

$hash = {
    a => {
        0 => {test => 1},
        1 => {test => 2},
        2 => {test => 3},
        3 => {test => 4},
    },
};


2 commentaires

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


9 Réponses :


0
votes

Utiliser les touches , valeurs fonction xxx


0 commentaires

0
votes

Cela devrait aider: xxx

acclamations


1 commentaires

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



0
votes
printf ("%s = %s\n", $_, $hash {$_}) foreach (keys (%hash));

0 commentaires

2
votes
  while( my( $key, $value ) = each( %hash ) ) {
         ...
  }

0 commentaires

2
votes

au lieu de xxx

vous devez écrire xxx

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.


2 commentaires

et pire, il est stocké sous une forme stricte!


Oui, mais dans son deuxième Exemple The Op a écrit: $ h = {du contenu}; et que 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).



19
votes

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: xxx

Vous pouvez utiliser la fonction chaque si vous ne vous souciez pas de la commande: xxx

ou le pour / foreach Construit si vous souhaitez trier: xxx

ou si vous ne voulez que certaines valeurs, vous pouvez utiliser une tranche de hachage, par exemple: xxx

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 :)


4 commentaires

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?" :)



2
votes

Syntaxe Pour accéder aux cellules internes pour votre deuxième exemple, c'est comme: xxx

qui vous donnera 1 dans votre exemple.

Si vous voulez itérer sur elle, Vous pouvez le faire comme suit (les lignes d'impression sont à des fins d'illustration): xxx

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};

( Timtowtdi : il y a évidemment plus d'une façon de le faire; Je crois que l'exemple ci-dessus est le plus simple pour moi, mais pas le plus efficace; en utilisant chacun au lieu de pour itérateur éviterait une recherche inutile de hachage).


4 commentaires

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'}


@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?



1
votes

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";
}
}


1 commentaires

Est-ce que tu l'as essayé? Quel est le résultat de la première impression: impression $ clé, "=", $ val, "\ n";



0
votes

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


0 commentaires