Affichage d'un tableau de hash

Aucune réponse
Avatar
kurtz le pirate
Bonjour,

J'ai mon AoH :

my @aoh_Attribute = (
{ id_Attribute => 25, id_Attribute_group => 4, position => 0, },
{ id_Attribute => 138, id_Attribute_group => 4, position => 12, },
{ id_Attribute => 126, id_Attribute_group => 4, position => 1, },
{ id_Attribute => 52, id_Attribute_group => 4, position => 11, },
{ id_Attribute => 51, id_Attribute_group => 4, position => 10, },
{ id_Attribute => 50, id_Attribute_group => 4, position => 9, },
{ id_Attribute => 49, id_Attribute_group => 4, position => 8, },
{ id_Attribute => 48, id_Attribute_group => 4, position => 7, },
{ id_Attribute => 26, id_Attribute_group => 4, position => 2, },
{ id_Attribute => 27, id_Attribute_group => 4, position => 3, },
{ id_Attribute => 29, id_Attribute_group => 4, position => 4, },
{ id_Attribute => 30, id_Attribute_group => 4, position => 5, },
{ id_Attribute => 247, id_Attribute_group => 4, position => 6, },
{ id_Attribute => 144, id_Attribute_group => 4, position => 13, },
);


Que j'affiche avec ce code trouvé sur perldsc.
for my $href ( @aoh_Attribute ) {
print "{ ";
for my $role ( keys %$href ) {
print "$role=$href->{$role}\t";
}
print "}\n";
}
print "\n\n";


J'obtiens :
{ position=0 id_Attribute_group=4 id_Attribute=25 }
{ position=12 id_Attribute_group=4 id_Attribute=138 }
{ position=1 id_Attribute_group=4 id_Attribute=126 }
{ position=11 id_Attribute_group=4 id_Attribute=52 }
{ position=10 id_Attribute_group=4 id_Attribute=51 }
{ position=9 id_Attribute_group=4 id_Attribute=50 }
{ position=8 id_Attribute_group=4 id_Attribute=49 }
{ position=7 id_Attribute_group=4 id_Attribute=48 }
{ position=2 id_Attribute_group=4 id_Attribute=26 }
{ position=3 id_Attribute_group=4 id_Attribute=27 }
{ position=4 id_Attribute_group=4 id_Attribute=29 }
{ position=5 id_Attribute_group=4 id_Attribute=30 }
{ position=6 id_Attribute_group=4 id_Attribute=247 }
{ position=13 id_Attribute_group=4 id_Attribute=144 }



C'est peut être normal, mais pourquoi l'ordre des clés n'est pas le même
que celui dans la déclaration du AoH ?


Merci

--
kurtz le pirate
compagnie de la banquise

3 réponses

Avatar
Marc SCHAEFER
kurtz le pirate wrote:
C'est peut être normal, mais pourquoi l'ordre des clés n'est pas le même
que celui dans la déclaration du AoH ?

Perl propose des tableaux de hâchage et non pas des tableaux associatifs
ordonnés.
L'ordre des clés est donc dépendant de l'implémentation et des
clés qui ont été insérées. Comme p.ex. dans un fichier DBM indexé
(cf tie).
Si un ordre est indispensable, alors énumérer par ordre d'un tableau
de clés, ou ajouter un attribut de numéro (order) et trier avec la version
à argument du sort:
foreach my $t (sort { $a <=> $b } keys %hash) {
}
en remplaçant $a <=> $b par exemple par
$hash{$a}->{'order'} <=> $hash{$b}->{'order'}
Avatar
kurtz le pirate
Le 06/11/2017 à 14:00, Marc SCHAEFER a écrit :
Perl propose des tableaux de hâchage et non pas des tableaux associatifs
ordonnés.
L'ordre des clés est donc dépendant de l'implémentation et des
clés qui ont été insérées. Comme p.ex. dans un fichier DBM indexé
(cf tie).

Donc c'est /normal/
Merci.
--
kurtz le pirate
compagnie de la banquise
Avatar
Paul Gaborit
À (at) Mon, 6 Nov 2017 12:30:43 +0100,
kurtz le pirate écrivait (wrote):
J'ai mon AoH :

[...]>
Que j'affiche avec ce code trouvé sur perldsc.
for my $href ( @aoh_Attribute ) {
print "{ ";
for my $role ( keys %$href ) {
print "$role=$href->{$role}t";
}
print "}n";
}
print "nn";

[...]>
C'est peut être normal, mais pourquoi l'ordre des clés n'est pas le même
que celui dans la déclaration du AoH ?

C'est normal... et, en plus, avec les versions récentes de Perl, l'ordre
change à chaque exécution ! ;-)
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>