tirer un hash de hash

tirer un hash de hash - Perl - Programmation

Marsh Posté le 26-08-2008 à 16:24:30    

salut,
 
Je dispose d'un hash de hash que j'alimente à partir d'une requête;
A la sortie de ma requête j'ai mes lignes trier .
 
Pays1
Pays2
Pays3
 
donc je pense que mon hash a été alimenter de cette maniere, vu que j'ai inserer les lignes dans cette ordre
et donc je devrais avoir cela :
 

Citation :

%montablo = (
    Pays1=> {
        name=> "Iceland"
    },
    Pays2=> {
        name => "USA"
    },
    Pays3=> {
        name=> "France"
    },
);


Je les insere comme cela dans mon hash, mais le problème est que quand je fais un select dans mon hash
 
Le problemes est que lorsque j'affiche les pays de mon tableaux
j'ai ceci en sortie :
 

Citation :

Pays2
Pays1
Pays3


 
et non pas  
 

Citation :

Pays1
Pays2
Pays3


 
je comprend pas;
est-ce possible de le trier ?
 
merci de votre aide

Reply

Marsh Posté le 26-08-2008 à 16:24:30   

Reply

Marsh Posté le 26-08-2008 à 17:57:54    

Les hashs ne sont pas des collections ordonnées.
http://faq.perl.org/perlfaq4.html#How_do_I_sort_a_hash

Reply

Marsh Posté le 27-08-2008 à 01:06:39    

Code :
  1. for my $key (sort(keys(%hash))) {
  2.   print $hash{$key} . "\n";
  3. }


 
mais question: pourquoi est-ce que tu mets ca dans un hash?

Reply

Marsh Posté le 27-08-2008 à 08:22:39    

au depart je l'avais mis dans un hash de hash , je pensai que j'allais avoir plus de groupe.
La je l'ai mis dans un hash tout simple :

Code :
  1. %montablo = (
  2.     Pays1=> "Iceland"
  3.     ,
  4.     Pays2=>  "USA"
  5.     },
  6.     Pays3=>  "France"
  7.    
  8. );


 
A ta question : tu voulais que je le mette dans un array ?

Reply

Marsh Posté le 27-08-2008 à 09:25:37    

Si l'ordre a de l'importance à un autre moment qu'à l'affichage, alors oui, n'utilise pas un hash.

Reply

Marsh Posté le 27-08-2008 à 09:43:17    

apparament en mettant un sort,j'ai bien pays1 qui sort avant pays2 puis pays3.
Le sort tri les clés par ordre alphabetique c est bien cela ?

Reply

Marsh Posté le 27-08-2008 à 09:53:19    

par défaut sort utilise cmp pour sa comparaison, donc oui il trie par ordre alphabétique.
 
Mas comme dit plus haut et  vu la tête de tes clés, un array te serait à mon avis bien plus utile.


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 27-08-2008 à 11:02:38    

le truc c'est qu'un array pour moi,c'est quelque chose dans ce genre la :
@array (valeur1,valeur2,valeur3) et ce n'est pas mon cas

Reply

Marsh Posté le 27-08-2008 à 11:59:47    

donny3 a écrit :

le truc c'est qu'un array pour moi,c'est quelque chose dans ce genre la :
@array (valeur1,valeur2,valeur3) et ce n'est pas mon cas


 
 
et pourquoi?
 

Code :
  1. # Pays1
  2. push(@pays, 'Iceland');
  3. # Pays 2
  4. push(@pays, 'USA');
  5. # Pays 3
  6. push(@pays, 'France');
  7. for my $pays (@pays) {
  8.   print $pays . "\n";
  9. }
  10. # ou encore
  11. for (my $i = 0; $i < @pays, $i++) {
  12.   print 'Pays' . $i+1 . '=' . $pays[$i] . "\n";
  13. }

Reply

Marsh Posté le 27-08-2008 à 17:14:48    

parceque j'ai besoin d'avoir le pays1 ,pays2 ....... car un pays peut contenir plusieurs pays

Reply

Marsh Posté le 27-08-2008 à 17:14:48   

Reply

Marsh Posté le 27-08-2008 à 17:28:31    

donny3 a écrit :

parceque j'ai besoin d'avoir le pays1 ,pays2 ....... car un pays peut contenir plusieurs pays


 [:cerveau heink]

 

Quoi qu'il en soit rien ne t'empeche de faire un tableau mixant valeurs

Code :
  1. push(@pays, ['England', 'Iceland', 'Madagascar']);
  2. push(@pays, ['USA', 'Russia']);
  3. push(@pays, 'France');


et pour afficher tout ça, un bon coup de :

Code :
  1. map {print ((ref $_ eq 'ARRAY' ? join ' ', @{$_}: $_).' ');} @pays;


Message édité par anapajari le 27-08-2008 à 17:28:51

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed