Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
729 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Simulation de tri d'une hash

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Simulation de tri d'une hash

n°1197521
hop le fou
Tu m'en diras tant
Posté le 12-09-2005 à 12:33:08  profilanswer
 

Bonjour,
 
je cherche à effectuer un tri sur les éléments d'une hash.
Je sais que l'utilisation d'un tableau aurait été plus recommandé mais pas dans mon cas, vu l'utilisation que je fais de ma structure.
 
Ce que j'ai cherché a faire :
- récupérer les clés de mon tableau
- faire un sort sur mon tableau pour trier les clés en fonction des valeurs de ma hash
- parcourir ma hash dans l'ordre grace au tableau précédent
 
Je pensais que ca marchait mais en fait non, apparement ca fait intervenir je ne sais quoi d'aléatoire (le rangement des hash en mémoire?) qui fait que j'arrive a obtenir des résultats étranges...
 
J'ai fait un test vite fait pour me montrer que ca ne marchait pas mais j'aimerai bien comprendre pourquoi, et évidemment le faire fonctionner...
 
Voila le code :

Code :
  1. #!/usr/bin/perl -w
  2. use warnings;
  3. use strict;
  4. use Data::Dumper;
  5. my %hash_test = ('zservice1'=>101,'gservice2'=>201,'lservice3'=>301,'aservice4'=>401,'oservice5'=>501,'bservice6'=>601);
  6. my @liste_cles = keys %hash_test;
  7. print "Liste non triée\n";
  8. print Dumper @liste_cles;
  9. // apparement c'est ici que ca cloche...
  10. my @liste_cles_tries = sort {$hash_test{$a} < $hash_test{$b}} @liste_cles;
  11. print "\nListe triée\n";
  12. print Dumper @liste_cles_tries;
  13. print "Terminé\n";


et voila ce que j'ai obtenu :
 

Liste non triée
$VAR1 = 'aservice4';
$VAR2 = 'gservice2';
$VAR3 = 'bservice6';
$VAR4 = 'lservice3';
$VAR5 = 'zservice1';
$VAR6 = 'oservice5';
 
Liste triée
$VAR1 = 'bservice6';
$VAR2 = 'aservice4';
$VAR3 = 'lservice3';
$VAR4 = 'gservice2';
$VAR5 = 'oservice5';
$VAR6 = 'zservice1';
Terminé


L'élément 5 s'est un peu perdu...
Si quelqu'un a une solution ou une autre idée pour ce problème, je suis preneur...
 
Merci :)

mood
Publicité
Posté le 12-09-2005 à 12:33:08  profilanswer
 

n°1197569
pospos
Posté le 12-09-2005 à 13:53:32  profilanswer
 

essai ca:
 
my @liste_cles_tries = sort {$hash_test{$a} <=> $hash_test{$b}}  @liste_cles;

n°1197570
rotoutou
Across member
Posté le 12-09-2005 à 13:55:51  profilanswer
 
n°1197575
hop le fou
Tu m'en diras tant
Posté le 12-09-2005 à 14:02:21  profilanswer
 

Merci :)
 
Effectivement en lisant la doc de sort un peu plus attentivement, je viens de voir qu'il fallait utiliser <=> ou cmp.
 
Pour ma culture perso, ca correspond à qqchose d'utiliser des opérateurs "simples" dans le sort?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Simulation de tri d'une hash

 

Sujets relatifs
XML::Simple Hash de hash de hash...Simulation de modèles financiers
[Perl] switch() vs hash de fonctions[VHDL] problème de simulation avec Quartus II
savoir si une variable est un hashGrid computing : simulation d'application
CTRL C simulation"Authorization" pour une simulation de requête
programmation d'un jeu de simulation de gestionEffect de camera en 3D Simulation [plz help]
Plus de sujets relatifs à : Simulation de tri d'une hash


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)