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

Le
Luc Martineau
Bonjour,

Je désire obtenir le hash suivant



mon_hash
|
|--> LUC--> avant -->joueur_1 --> pts 
| | | |
| | | | buts =2
| | |
| | |-->joueur_2 --> pts =1
| | |
| |
| |
| |
| |
| |-> gardien -->joueur_3 --> pts 
| | |
| | | arrets =2
| |
| |
| |-->joueur_4 --> pts =1
| |
| |
|
|--> BOB--> avant -->joueur_1 --> pts 
| | | |
| | | | buts =2
| | |
| | |-->joueur_2 --> pts =1
| | |
| |
| |
| |
| |
| |-> gardien -->joueur_3 --> pts 
| | |
| | | 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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Luc Martineau
Le #434630


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

Paul GABORIT
Le #434629
À (at) Wed, 14 Apr 2004 00:29:00 -0400,
Luc Martineau
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 - Perl en français -
Publicité
Poster une réponse
Anonyme