Trier un tableau ...

Trier un tableau ... - Perl - Programmation

Marsh Posté le 07-12-2006 à 12:13:17    

Bonsoir,  
 
Voici mon petit problème.
J'ai à ma disposition :
 
$ptrTableau qui est un pointeur sur un tableau contenant des hash
@tabTaille qui contient dans chaque case la valeur selon laquelle je veux trier $ptrTableau.
 
Par exemple dans une case de $ptrTableau il y a une hash cette hash est composée d'une clé et d'une valeur (qui est un tableau) et j'aimerais trié $ptrTableau selon la taille de tableaux contenus dans les hash. Donc j'ai mis dans chaque case i de @tabTaille la taille du tableau contenu dans la hash de la case i de $ptrTableau.
 
Comment faire ?
J'ai trouvé ça, mais ca marche pas...

Code :
  1. my @retour = $ptrTableau->[sort{$tabTaille[$a] <=> $tabTaille[$b]} 0 .. $#tabTaille];


 
Merci de votre aide

Reply

Marsh Posté le 07-12-2006 à 12:13:17   

Reply

Marsh Posté le 07-12-2006 à 12:26:45    

pas compris un truc dans des hash tu as une seule clé/valeur?
Sinon tu prends la plus grande taille de tableau de toutes les valeurs de la hash?
Genre ton truc ça ressemble à ça:

Code :
  1. my $ptrTableau = [{'a'=>[1..3], 'b'=>[2..10], 'c'=>[3..8]},{'d'=>[1..2], 'e'=>[4..8], 'f'=>[1..12]}];

Reply

Marsh Posté le 07-12-2006 à 12:29:03    

anapajari a écrit :

pas compris un truc dans des hash tu as une seule clé/valeur?
Sinon tu prends la plus grande taille de tableau de toutes les valeurs de la hash?
Genre ton truc ça ressemble à ça:

Code :
  1. my $ptrTableau = [{'a'=>[1..3], 'b'=>[2..10], 'c'=>[3..8]},{'d'=>[1..2], 'e'=>[4..8], 'f'=>[1..12]}];



 
Oui c'est ça. Now je veux trier $ptrTableau selon la taille des tableaux contenus dans les hashs....

Reply

Marsh Posté le 07-12-2006 à 13:15:23    

selon la taille des tableaux contenus dans les hashs c'est:

  • selon la somme totale des tailles de tous les tableaux contenus dans la hash

OU

  • selon la taille du plus grand tableau contenu dans la hash

?

Reply

Marsh Posté le 07-12-2006 à 13:24:38    

anapajari a écrit :

selon la taille des tableaux contenus dans les hashs c'est:

  • selon la somme totale des tailles de tous les tableaux contenus dans la hash

OU

  • selon la taille du plus grand tableau contenu dans la hash

?


selon la taille du plus grd tableau contenu dans la hash... de manière croissante

Reply

Marsh Posté le 07-12-2006 à 13:37:19    

je ferais un fonction sort dans ce genre là:

Code :
  1. sub gregSort {
  2.   my $maxA = 0;
  3.   my $maxB = 0;
  4.   foreach (keys %$a){
  5.      $maxA = $#{$$a{$_}} if $maxA < $#{$$a{$_}};
  6.   }
  7.   foreach (keys %$b){
  8.      $maxB = $#{$$b{$_}} if $maxB < $#{$$b{$_}};
  9.   }
  10.   return $maxA<=>$maxB;
  11. }
 

Et ensuite tu n'as plus qu'a faire

Code :
  1. my @retour = sort gregSort @$ptrTableau;


Message édité par anapajari le 07-12-2006 à 14:03:32
Reply

Marsh Posté le 07-12-2006 à 13:54:16    

Ca marche... 1000 mercis !

Reply

Sujets relatifs:

Leave a Replay

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