sort hash

sort hash - Perl - Programmation

Marsh Posté le 16-10-2006 à 18:08:56    

Salut...
 
J'aimerais trier une hash selon la clé mais lorsque je fais :  
 
foreach (%$hash) {
       print "$_\n";
}
 
ca m'affiche cela :  
 
OMA100303
OMA100515
OMA100550
OMA10067
 
mais jaimerais que ca m'affiche :  
 
OMA10067
OMA100303
OMA100515
OMA100550
 
Vous avez une idée ?

Reply

Marsh Posté le 16-10-2006 à 18:08:56   

Reply

Marsh Posté le 16-10-2006 à 18:33:06    

radioh a écrit :


Vous avez une idée ?


Ecrire toi-même la condition de tri pour la fonction sort.
 
Voir l'aide sur cette fonction : http://perldoc.perl.org/functions/sort.html


Message édité par Elmoricq le 16-10-2006 à 18:35:26
Reply

Marsh Posté le 16-10-2006 à 18:34:35    

et bien il faut effectivement que tu utilises sort, par exemple:

Code :
  1. foreach(sort keys %taHash)


mais tu vas vite te rendre compte que le sort ne va pas exactement correspondre à ce que tu veux.
 
Tu peux donc faire ton propre sort. Il s'agit en fait d'une sub reçoit obligatoirement en paramètre $a et $b et qui doit retourne -1,0, ou 1 en fonction de qui est plus grand que l'autre.
Par exemple:

Code :
  1. sub lengthSort{
  2.   length($a)<=>length($b);
  3. }


Compare la longueur des deux elements.
Et pour l'appel tu fais comme ça:

Code :
  1. foreach(sort lengthSort keys %taHash)


 
edit: burned  [:benou_grilled]


Message édité par anapajari le 16-10-2006 à 18:34:58
Reply

Marsh Posté le 16-10-2006 à 19:02:59    

En l'occurence ici, un test sur la taille ne suffit pas, un petit s/\D//g, combiné avec l'opérateur <=> serait mieux je pense.

Reply

Marsh Posté le 16-10-2006 à 19:04:50    

Elmoricq a écrit :

En l'occurence ici, un test sur la taille ne suffit pas, un petit s/\D//g, combiné avec l'opérateur <=> serait mieux je pense.


j'ai pas dit que ça suffisait :o c'était un exemple!
J'avais pas envie de faire tout le truc non plus ;)

Reply

Marsh Posté le 16-10-2006 à 19:05:26    

[:romf]
Comme tu peux le voir j'ai pas détaillé grand chose non plus [:o_doc]


Message édité par Elmoricq le 16-10-2006 à 19:05:45
Reply

Marsh Posté le 17-10-2006 à 09:05:31    

pour tous les tris un peu complexes (ou meme simple, du moment qu'on doit avoir recours à une sort sub autre que les cas les plus simples et optimisés en interne par perl) le module Sort::Key est vraiment ideal : ultra rapide (vraiment) et ultra simple

Reply

Sujets relatifs:

Leave a Replay

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