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

  FORUM HardWare.fr
  Programmation
  Perl

  sort hash

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sort hash

n°1458246
radioh
Posté le 16-10-2006 à 18:08:56  profilanswer
 

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 ?

mood
Publicité
Posté le 16-10-2006 à 18:08:56  profilanswer
 

n°1458264
Elmoricq
Modérateur
Posté le 16-10-2006 à 18:33:06  profilanswer
 

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
n°1458265
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-10-2006 à 18:34:35  profilanswer
 

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
n°1458278
Elmoricq
Modérateur
Posté le 16-10-2006 à 19:02:59  profilanswer
 

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.

n°1458280
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-10-2006 à 19:04:50  profilanswer
 

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 ;)

n°1458281
Elmoricq
Modérateur
Posté le 16-10-2006 à 19:05:26  profilanswer
 

[: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
n°1458509
pospos
Posté le 17-10-2006 à 09:05:31  profilanswer
 

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


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

  sort hash

 

Sujets relatifs
std::sort et operator d'affectationMettre un tableau dans une hash ?
AWK|SORT en environnement Windowparcours table de hash problematique
Variable qui sort pas de l'includeParcours d'un hash de données XML
passage d'une hash en paramètre à une autre scriptFailed to find method for hash
Collections sort(list lst, comparator c)Simulation de tri d'une hash
Plus de sujets relatifs à : sort hash


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