Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Initialiser un hash de hash de hash de hash au fur et à mesure

2 réponses
Avatar
Luc Martineau
Bonjour,

Je désire obtenir le hash suivant



mon_hash
|
|-----> LUC-----> avant ----->joueur_1 -----> pts =12
| | | |
| | | |------ buts =2
| | |
| | |----->joueur_2 -----> pts =1
| | | ...
| | ...
| |
| |
| |
| |----> gardien ----->joueur_3 -----> pts =12
| | |
| | |------ arrets =2
| |
| |
| |----->joueur_4 -----> pts =1
| | ...
| |
|
|-----> BOB-----> avant ----->joueur_1 -----> pts =12
| | | |
| | | |------ buts =2
| | |
| | |----->joueur_2 -----> pts =1
| | | ...
| | ...
| |
| |
| |
| |----> gardien ----->joueur_3 -----> pts =12
| | |
| | |------ arrets =2
| |
| |
| |----->joueur_4 -----> pts =1
| | ...
| |
... ...

Donc pour résumer, un propriétaire (LUC, BOB...) a des avants et des gardiens.
Ces joueurs peuvent appartenir à plusieurs propriétaires (joueur_1, joueur_2...)
Les avants ont tous les mêmes attibuts (pts, buts).
Les gardiens ont tous les mêmes attibuts (pts, arrets).


J'ai écrit une boucle pour initailiser mon_hash au fur et à mesure.
J'ai lu les données dans une base de données.


# boucle pour les avants
while( ( $proprio_id, $joueur_id, $pts, $buts) = monselect->fetchrow_array() ) {

%monhash=("$proprio_id" => {"avant" => { $joueur_id => { "pts" => $pts,
"buts"=> $buts }}});

}

# boucle pour les gardiens
while(($proprio_id, $joueur_id, $pts, $arrets) = monselect2->fetchrow_array()) {

%monhash=("$proprio_id"=>{"avant"=>{ $joueur_id => { "pts" => $pts,
"arrets"=> $arrets }}});

}


Je croyais ainsi intialiser le hash au complet.
Seule le dernier joueur est dans le hash...

Je voulais utiliser cette structure pour trier les avants de chacun des
propriétaires selen le nombre de points et ensuite trier les gardiens.

J'ai créer un hash de hash de hash de hash à la main. Tout fonctionne...

Existe-t'il un moyen d'initialiser un hash de hash de hash de hash au fur et à
mesure?

Merci

Luc

2 réponses

Avatar
Luc Martineau


Soit on initialise (lors de la création) soit on remplit, on met à jour, on
ajoute, on modifie... éventuellement même, on ré-initialise ! Mais on ne peut
pas initialiser (le même objet) au fur et à mesure ;-)

C'est vrai que initialiser au fur et à mesure est étrange :-)


Je m'en souviendrai!


Et voili... Pour en savoir plus, lisez 'perldsc'. Tout y est expliqué.

Merci beaucoup pour le coup de pouce.


Luc

Avatar
Paul GABORIT
À (at) Wed, 14 Apr 2004 00:29:00 -0400,
Luc Martineau écrivait (wrote):
Je désire obtenir le hash suivant
[... dessin ...]

Donc pour résumer, un propriétaire (LUC, BOB...) a des avants et des
gardiens. Ces joueurs peuvent appartenir à plusieurs propriétaires
(joueur_1, joueur_2...) Les avants ont tous les mêmes attibuts (pts, buts).
Les gardiens ont tous les mêmes attibuts (pts, arrets).

J'ai écrit une boucle pour initailiser mon_hash au fur et à mesure.
J'ai lu les données dans une base de données.


Soit on initialise (lors de la création) soit on remplit, on met à jour, on
ajoute, on modifie... éventuellement même, on ré-initialise ! Mais on ne peut
pas initialiser (le même objet) au fur et à mesure ;-)


my %h; # pour l'initialiser vide

# boucle pour les avants
while( ( $proprio_id, $joueur_id, $pts, $buts)
= monselect->fetchrow_array() ) {

%h=("$proprio_id" => {"avant" => {$joueur_id => {"pts" => $pts,
"buts"=> $buts }}});
# en fait, avec votre méthode, vous réinitialisez le contenu à chaque fois...


$h{$proprio_id}{avant}{$joueur_id} = {pts => $pts, buts => $buts};

}

# boucle pour les gardiens
while(($proprio_id, $joueur_id, $pts, $arrets)
= monselect2->fetchrow_array()) {

%h=("$proprio_id"=>{"avant"=>{$joueur_id => {"pts" => $pts,
"arrets"=> $arrets }}});
# j'ai supposé que 'avant' voulait dire 'gardien' ;-)

$h{$proprio_id}{gardien}{$joueur_id} = {pts => $pts, arrets => $arrets};
}


Et voili... Pour en savoir plus, lisez 'perldsc'. Tout y est expliqué.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>